Wenn Sie eine Zeile auf den Kopf stellen (PostgreSQL> = 9.5) und möchten, dass das mögliche INSERT genau dem möglichen UPDATE entspricht, können Sie es folgendermaßen schreiben:
INSERT INTO tablename (id, username, password, level, email)
VALUES (1, 'John', 'qwerty', 5, '[email protected]')
ON CONFLICT (id) DO UPDATE SET
id=EXCLUDED.id, username=EXCLUDED.username,
password=EXCLUDED.password, level=EXCLUDED.level,email=EXCLUDED.email
Gibt es einen kürzeren Weg? Um es nur zu sagen: Verwenden Sie alle EXCLUDE-Werte.
In SQLite habe ich Folgendes gemacht:
INSERT OR REPLACE INTO tablename (id, user, password, level, email)
VALUES (1, 'John', 'qwerty', 5, '[email protected]')
postgresql
upsert
postgresql-9.5
Sebastian
quelle
quelle
INSERT INTO tablename (id, username, password, level, email) VALUES (1, 'John', 'qwerty', 5, '[email protected]') ON CONFLICT (id) DO UPDATE SET (username, password, level, email) = (EXCLUDED.username, EXCLUDED.password, EXCLUDED.level, EXCLUDED.email).
Fast die gleiche, aber einfach zu kopieren / einfügen / verwalten der SpaltenlisteAntworten:
Postgres hat kein Äquivalent zu implementiert
INSERT OR REPLACE
. Aus denON CONFLICT
Dokumenten (Schwerpunkt Mine):Dies gilt zwar nicht als Abkürzung für das Ersetzen,
ON CONFLICT DO UPDATE
gilt jedoch allgemeiner, da Sie damit neue Werte basierend auf bereits vorhandenen Daten festlegen können. Beispielsweise:quelle