правильный синтаксис upsert с postgresql 9.5, ниже запрос показывает ошибку column reference "gallery_id" is ambiguous
, почему?
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`;
Я попробовал изменить WHERE gallery_id = $2;
на WHERE category_gallery.gallery_id = $2;
, а затем показывает ошибку there is no unique or exclusion constraint matching the ON CONFLICT specification
, но Я не хочу, чтобы set_file или category_id были уникальными, потому что я хочу, чтобы оба столбца были такими же, обновить....
Как правильно выполнить upsert в postgres 9.5?
if ON CONFLICT
нужен уникальный столбец, следует ли использовать другой метод, как?
Я хочу, чтобы несколько столбцов обоих конфликтов затем обновлялись, что правильно используется
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 не уникальный столбец)
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 | ...