Colonnes generees virtuelles

PostgreSQL 🟡 Mid

Dé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

Migrer vers PG18 sans vérifier si du code s'appuyait implicitement sur le stockage physique des colonnes générées (par exemple un index dessus).

Termes liés

#sgbd#interview#database#postgresql#pg18

En entretien

  1. 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é.

  2. 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

← → au clavier pour passer d'une fiche à l'autre