ON CONFLICT e RETURNING

Inserisce una riga oppure aggiorna quella esistente (upsert), e restituisce le righe modificate.

Sintassi

INSERT INTO table VALUES (…) ON CONFLICT (key) DO UPDATE SET column = EXCLUDED.column;
INSERT … ON CONFLICT DO NOTHING;
UPDATE … RETURNING column_list;
  • EXCLUDED contiene la riga che hai provato a inserire.
  • Altri database: MySQL ON DUPLICATE KEY UPDATE, SQL Server e Oracle MERGE.

Esempio

SELECT product_id, name FROM products WHERE product_id = 3;

Il prodotto 3 esiste, quindi un upsert con chiave 3 lo aggiornerebbe invece di fallire.

Tabelle usate: products. Provalo in una lezione qui sotto.

Errori comuni

  • ON CONFLICT richiede un vincolo di unicità o una chiave primaria sulle colonne che indichi.
  • RETURNING è di PostgreSQL (e di SQLite, MariaDB); SQL Server usa OUTPUT.

Esercitati