PostgreSQL 18 : nouveautés clés pour les développeurs

,
postgresql version 18

Introduction

PostgreSQL 18 apporte une série d’améliorations significatives qui renforcent sa position comme SGBD de référence dans l’open source. Les nouveautés de cette version touchent à la fois les développeurs d’applications et les administrateurs de bases de données. Dans cet article, nous allons explorer en profondeur trois nouveautés particulièrement intéressantes :

  • le support des UUID version 7,
  • les colonnes virtuelles générées,
  • l’amélioration des clauses RETURNING avec OLD et NEW.

Ces fonctionnalités ouvrent de nouvelles perspectives en termes de performance, de simplification de code et de lisibilité pour les projets d’entreprise comme ceux menés par IsiNeva.


Support de l’UUID version 7

Contexte

Les identifiants uniques universels (UUID) sont largement utilisés pour générer des clés primaires distribuées sans dépendre d’un séquenceur centralisé. PostgreSQL supportait déjà plusieurs versions d’UUID, mais avec la version 18, le support de l’UUID v7 est introduit.

Qu’est-ce que l’UUID v7 ?

UUID v7 est une version basée sur le temps (comme v1) mais conçue pour mieux tirer parti des bases de données modernes. Il combine un timestamp précis (millisecondes) avec des bits aléatoires, ce qui permet :

  • Une meilleure localité d’indexation (les UUID générés proches dans le temps sont proches en termes de tri binaire).
  • Une amélioration des performances pour les index B-Tree.

Exemple pratique

-- Génération d'un UUIDv7
SELECT uuidv7();

-- Creation d'une table avec UUIDv7 comme clé primaire
CREATE TABLE commandes (
id UUID PRIMARY KEY DEFAULT uuidv7(),
id_client INT,
qte DECIMAL(10,2),
total DECIMAL(10,2),
date_creation TIMESTAMP DEFAULT NOW()
);

Grâce à l’UUID v7, les écritures massives dans la table commandes sont plus efficaces, car l’index sur id souffre moins de fragmentation.


Colonnes virtuelles générées

Contexte

Jusqu’à PostgreSQL 17, il fallait recourir à des vues ou des colonnes calculées via triggers pour exposer une donnée dérivée. Avec PostgreSQL 18, les colonnes virtuelles générées font leur apparition, simplifiant considérablement la modélisation.

Exemple pratique : employé avec salaire annuel

CREATE TABLE salaries(
    id SERIAL PRIMARY KEY,
    nom TEXT NOT NULL,
    prenom TEXT NOT NULL,
    salaire_mensuel DECIMAL(10,2),
    salaire_annuel DECIMAL(12,2) GENERATED ALWAYS AS (salaire_mensuel * 12) VIRTUAL
);
SELECT nom, prenom, salaire_mensuel , salaire_annuel 
FROM salaries;

Ici :

  • salaire_mensuel est stocké normalement.
  • salaire_annuel est automatiquement calculé et stocké par PostgreSQL.

Avantages

  • Plus besoin de recalculer manuellement la valeur.
  • Cohérence garantie au niveau du SGBD.
  • Requêtes plus simples et lisibles :

Cette fonctionnalité répond à un besoin fréquent en entreprise, notamment dans la gestion RH ou financière.


Returning OLD et NEW

Contexte

La clause RETURNING est très utilisée pour récupérer immédiatement le résultat d’un INSERT, UPDATE ou DELETE. PostgreSQL 18 va plus loin en permettant l’accès explicite à OLD et NEW, jusque-là réservés aux triggers.

Exemple pratique

Supposons une table produits :

CREATE TABLE produits (
id SERIAL PRIMARY KEY,
nom TEXT NOT NULL,
prix NUMERIC(10,2) NO TNULL
);
-- Lors d’une mise à jour :
UPDATE produits SET prix = prix + 5.20
WHERE id = 1
RETURNING OLD.prix AS ancien_prix, NEW.prix AS nouveau_prix;

-- Résultat attendu :
ancien_prix | nouveau_prix
------------+--------------
90.00       | 95.20

Bénéfices

  • Simplification du code applicatif : plus besoin de faire un SELECT avant un UPDATE.
  • Gain de performance : une seule requête SQL suffit.
  • Lisibilité accrue : le SQL exprime directement l’intention.

Conclusion

PostgreSQL 18 apporte des évolutions majeures qui renforcent son attractivité pour les entreprises exigeantes :

  • L’UUID v7 améliore la performance des index tout en gardant l’unicité distribuée.
  • Les colonnes virtuelles générées simplifient la modélisation et garantissent la cohérence.
  • L’utilisation de RETURNING avec OLD et NEW réduit la complexité applicative et optimise les accès.

Liens externes