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

Syntaxfehler im UPSERT-Testcode

Da dies das oberste Google-Ergebnis für Fehler ist:

ON CONFLICT DO UPDATE command cannot affect row a second time

Ich werde hinzufügen, dass dies durch doppelte Konfliktwerte verursacht werden kann , z. B.

INSERT INTO distributors (did, dname)
VALUES 
    (5, 'Gizmo Transglobal'), 
    (5, 'Associated Computing, Inc')
ON CONFLICT (did) DO UPDATE SET dname = EXCLUDED.dname;

In diesem Fall versuchen wir mit dim zwei Werte einzufügen auf 5 setzen . Als dim ist der Index, der in der Abfrage selbst keinen Konflikt haben kann.

Ich bin auf diesen Fehler gestoßen, als ich Mikrodienste implementierte und Anfragen verarbeitete, von denen einige doppelte Datensätze hatten.