ON CONFLICT und RETURNING
Fügt eine Zeile ein oder aktualisiert die vorhandene (Upsert) und gibt die geänderten Zeilen zurück.
Syntax
INSERT INTO table VALUES (…) ON CONFLICT (key) DO UPDATE SET column = EXCLUDED.column;INSERT … ON CONFLICT DO NOTHING;UPDATE … RETURNING column_list;
- EXCLUDED enthält die Zeile, die du einfügen wolltest.
- Andere Datenbanken: MySQL ON DUPLICATE KEY UPDATE, SQL Server und Oracle MERGE.
Beispiel
SELECT product_id, name FROM products WHERE product_id = 3;
Produkt 3 existiert bereits. Ein Upsert mit dem Schlüssel 3 würde es aktualisieren, statt einen Fehler auszulösen.
Verwendete Tabellen: products. Probiere es unten in einer Lektion aus.
Häufige Fehler
- ON CONFLICT benötigt einen Unique-Constraint oder Primärschlüssel auf den Spalten, die du angibst.
- RETURNING gibt es in PostgreSQL (und in SQLite und MariaDB); SQL Server verwendet OUTPUT.