<!--
Les sources pour ce sujet sont :

* https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=5d06e99a3cfc23bbc217b4d78b8c070ad52f720e

Discussion :

* Discussion: https://www.postgresql.org/message-id/flat/CAAJ_b94yyJeGA-5M951_Lr+KfZokOp-2kXicpmEhi5FXhBeTog@mail.gmail.com

-->

<div class="slide-content">

  * `ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION AS`
  * Possibilité de modifier l'expression d'une colonne générée
  * Les anciennes valeurs sont régénérées

</div>

<div class="notes">

Création d'une table avec une colonne générée appelée `mesure_corrigee`.

```sql
postgres=# create table t1 (mesure int, mesure_corrigee int generated always as (mesure + 7) stored);
CREATE TABLE
```

Insertion de quelques mesures. Celles-ci apparaissent bien corrigées dans la colonne.

```sql
postgres=# insert into t1 values (10), (20), (30);
INSERT 0 3
postgres=# select * from t1 ;
 mesure | mesure_corrigee 
--------+-----------------
     10 |              17
     20 |              27
     30 |              37
(3 rows)
```

L'expression de la colonne `mesure_corrigee` peut être modifiée dans cette
nouvelle version de PostgreSQL.

```sql
postgres=# alter table t1 alter column mesure_corrigee set expression as (mesure + 8);
ALTER TABLE
postgres=# insert into t1 values (40), (50), (60);
INSERT 0 3
```

Les nouvelles lignes insérées ont bien leur colonne `mesure_corrigee` générée
par la nouvelle expression ... tout comme les anciennes lignes !

```sql
postgres=# select * from t1 ;
 mesure | mesure_corrigee 
--------+-----------------
     10 |              18
     20 |              28
     30 |              38
     40 |              48
     50 |              58
     60 |              68
(6 rows)
```

</div>
