ON CONFLICT et RETURNING
Insérer une ligne ou mettre à jour la ligne existante (upsert), et récupérer les lignes modifiées.
Syntaxe
INSERT INTO table VALUES (…) ON CONFLICT (key) DO UPDATE SET column = EXCLUDED.column;INSERT … ON CONFLICT DO NOTHING;UPDATE … RETURNING column_list;
- EXCLUDED contient la ligne que vous avez tenté d'insérer.
- Autres bases de données : MySQL ON DUPLICATE KEY UPDATE, SQL Server et Oracle MERGE.
Exemple
SELECT product_id, name FROM products WHERE product_id = 3;
Le produit 3 existe déjà : un upsert avec la clé 3 le mettrait donc à jour au lieu d'échouer.
Tables utilisées : products. Essayez-le dans une leçon ci-dessous.
Erreurs courantes
- ON CONFLICT exige une contrainte d'unicité ou une clé primaire sur les colonnes que vous indiquez.
- RETURNING est propre à PostgreSQL (et à SQLite, MariaDB) ; SQL Server utilise OUTPUT.