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.

Ćwicz to