PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL INSERT ON CONFLICT UPDATE (upsert) verwendet alle ausgeschlossenen Werte

Postgres hat kein Äquivalent zu INSERT OR REPLACE implementiert . Aus dem ON CONFLICT docs (Hervorhebung von mir):

Es kann entweder DO NOTHING oder eine DO UPDATE-Klausel sein, die die genauen Details angibt der im Konfliktfall durchzuführenden UPDATE-Aktion.

Obwohl es Ihnen keine Abkürzung zum Ersetzen gibt, ON CONFLICT DO UPDATE gilt allgemeiner, da Sie neue Werte basierend auf bereits vorhandenen Daten festlegen können. Zum Beispiel:

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