Wie mache ich das Upsert in Postgres 9.5?

korrekte Syntax von Upsert mit Postgresql 9.5, unten Abfrage zeigtcolumn reference "gallery_id" is ambiguous Fehler, warum?

var dbQuery = `INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id)
  DO UPDATE SET
  category_id = $1,
  last_modified_date = $3,
  last_modified_by_user_id = $4
  WHERE gallery_id = $2`;

Ich habe versucht, @ zu ändeWHERE gallery_id = $2; zuWHERE category_gallery.gallery_id = $2; zeigt dann Fehlerthere is no unique or exclusion constraint matching the ON CONFLICT specification, aberIch möchte gallery_id oder category_id nicht als eindeutig festlegen weil ich sicher sein will, dass beide Spalten gleich sind, dann aktualisiere ....

Wie mache ich es richtig in Postgres 9.5?

wennON CONFLICT brauche eine eindeutige Spalte, soll ich eine andere Methode verwenden, wie?



Ich möchte sicherstellen, dass beide Spalten in Konflikt stehen und aktualisieren, was die richtige Verwendung ist

var dbQuery = `INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id, gallery_id)
  DO UPDATE SET
  category_id = $1,
  last_modified_date = $3,
  last_modified_by_user_id = $4
  WHERE gallery_id = $2`;


var dbQuery = `INSERT INTO category_gallery (
  category_id, gallery_id, create_date, create_by_user_id
  ) VALUES ($1, $2, $3, $4)
  ON CONFLICT (category_id AND gallery_id)
  DO UPDATE SET
  category_id = $1,
  last_modified_date = $3,
  last_modified_by_user_id = $4
  WHERE gallery_id = $2`;

table (category_id, gallery_id keine eindeutige Spalte)

category_id | gallery_id | create_date | create_by_user_id | last_modified_date | last_modified_by_user_id
1 | 1 | ...  
1 | 2 | ...
2 | 2 | ...
1 | 3 | ...

Antworten auf die Frage(4)

Ihre Antwort auf die Frage