Я хочу обновить строки в моей базе данных postgres, если обновленная версия не будет нарушать ограничение первичного ключа. Если это так, я хочу оставить строку как есть.
Предполагая, что у таблицы есть первичные ключи на col1, col2, col3
, если я выполню такой запрос:
UPDATE table SET (col1, col2) = ('AAA', 'BBB')
WHERE col1='AAB' AND col2='BBA';
Запрос не будет выполнен, и я получу ошибку дублирующего ключа, если существует две записи:
'AAA', 'BBB', 'CCC'
'AAB', 'BBA', 'CCC'
То есть col3
одинаково между существующей строкой и строкой, подлежащей обновлению.
Если бы я был INSERT
строк, я бы использовал ON CONFLICT DO NOTHING
, но я не могу найти реализацию этого для UPDATE
. Существует ли эквивалент?