PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL INSERT ON CONFLICT UPDATE (upsert) usa tutti i valori esclusi

Postgres non ha implementato un equivalente a INSERT OR REPLACE . Dal ON CONFLICT docs (enfasi mia):

Può essere DO NOTHING o una clausola DO UPDATE che specifica i dettagli esatti dell'azione UPDATE da eseguire in caso di conflitto.

Sebbene non ti dia una scorciatoia per la sostituzione, ON CONFLICT DO UPDATE si applica più in generale, poiché consente di impostare nuovi valori in base a dati preesistenti. Ad esempio:

INSERT INTO users (id, level)
VALUES (1, 0)
ON CONFLICT (id) DO UPDATE
SET level = users.level + 1;