ON CONFLICT i RETURNING
Wstaw wiersz albo zaktualizuj istniejący (upsert) i zwróć wiersze, które się zmieniły.
Składnia
INSERT INTO table VALUES (…) ON CONFLICT (key) DO UPDATE SET column = EXCLUDED.column;INSERT … ON CONFLICT DO NOTHING;UPDATE … RETURNING column_list;
- EXCLUDED zawiera wiersz, który miał zostać wstawiony.
- Inne bazy: MySQL ON DUPLICATE KEY UPDATE, SQL Server i Oracle MERGE.
Przykład
SELECT product_id, name FROM products WHERE product_id = 3;
Produkt 3 istnieje, więc upsert z kluczem 3 zaktualizowałby go zamiast zakończyć się błędem.
Użyte tabele: products. Wypróbuj to w lekcji poniżej.
Typowe błędy
- ON CONFLICT wymaga ograniczenia unikalności albo klucza głównego na wymienionych kolumnach.
- RETURNING występuje w PostgreSQL (oraz SQLite, MariaDB); SQL Server używa OUTPUT.