Colonnes generees virtuelles
PostgreSQL 🟡 MidDéfinition
Depuis PostgreSQL 18 (25 septembre 2025), les colonnes générées (GENERATED ALWAYS AS) sont virtuelles par défaut : leur valeur est recalculee a la lecture plutôt que stockée sur disque a l'écriture. Le mot-clé STORED reste disponible pour retrouver l'ancien comportement quand le stockage physique est préféré.
Analogie
Comme un total de facture recalcule a chaque affichage plutôt qu'imprime et fige des la création du document.
Exemple de code
ALTER TABLE orders
ADD COLUMN total_ttc numeric
GENERATED ALWAYS AS (total_ht * 1.20) VIRTUAL;
-- Pour retrouver l'ancien comportement (stocke sur disque) :
-- GENERATED ALWAYS AS (total_ht * 1.20) STORED
Cas d'usage
Exposer un champ calcule (TTC, slug, total) sans payer le coût d'écriture ni le stockage disque a chaque insertion.
Anti-pattern
Termes liés
En entretien
Qu'est-ce qui change pour les colonnes générées avec PostgreSQL 18 ?
Les colonnes générées (GENERATED ALWAYS AS) sont désormais virtuelles par défaut : leur valeur est recalculée à la lecture plutôt que stockée sur disque à l'écriture. Le mot-clé STORED reste disponible pour retrouver l'ancien comportement quand le stockage physique est préféré.
Quel piège de migration faut-il vérifier en passant à PG18 ?
Il faut vérifier si du code s'appuyait implicitement sur le stockage physique des colonnes générées, par exemple un index posé dessus. Une colonne devenue virtuelle par défaut change ce comportement.
Fiche mise à jour le 2026-09-27