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.