Comment le faire correctement upsert dans postgres 9.5

syntaxe correcte de upsert avec postgresql 9.5, requête ci-dessous montre column reference "gallery_id" is ambiguous erreur , pourquoi?

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`;

J'ai essayé de changer WHERE gallery_id = $2; à WHERE category_gallery.gallery_id = $2; puis d'erreur s'affiche there is no unique or exclusion constraint matching the ON CONFLICT specification, mais je ne veux pas définir gallery_id ou category_id comme unique parce que je veux que les deux colonnes sont les mêmes, puis faire la mise à jour....

Comment le faire correctement upsert dans postgres 9.5?

si ON CONFLICT besoin colonne unique, dois-je utiliser une autre méthode, comment?

Je veux assurer à plusieurs colonnes à la fois des conflits, puis faire la mise à jour, qu'est-ce que l'utilisation correcte

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 pas unique colonne)

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 | ...

OriginalL'auteur user1575921 | 2016-04-22