MERGE

PostgreSQL 🔴 Senior

Définition

Commande introduite dans PostgreSQL 15 (2022) qui combine INSERT, UPDATE et DELETE en une seule instruction conditionnelle via des clauses WHEN MATCHED / WHEN NOT MATCHED. PostgreSQL 17 (26 septembre 2024) y ajoute WHEN NOT MATCHED BY SOURCE et le support de RETURNING avec la fonction merge_action().

Analogie

Comme trier un stock en une seule passe : ce qui existe déjà est mis a jour, ce qui est nouveau est ajoute, ce qui a disparu est retire.

Exemple de code

MERGE INTO stock s
USING deliveries d ON d.sku = s.sku
WHEN MATCHED THEN
  UPDATE SET qty = s.qty + d.qty
WHEN NOT MATCHED THEN
  INSERT (sku, qty) VALUES (d.sku, d.qty)
WHEN NOT MATCHED BY SOURCE THEN
  DELETE
RETURNING merge_action(), s.sku;

Cas d'usage

Synchroniser une table cible avec une source (upsert + suppression) en une seule requête atomique.

Anti-pattern

Utiliser MERGE sur une vue matérialisée ou une table distante (foreign table) : non supporte.

Termes liés

#sgbd#interview#database#postgresql#pg17

Fiche mise à jour le 2026-09-27

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