Я хотел бы использовать вставку.. на confict do update.. синтаксис с таблицей, которая имеет уникальные ограничения на два столбца. Возможно ли это?
например. mytable имеет отдельные уникальные ограничения на col1 и col2.
Я могу написать:
INSERT INTO mytable(col1, col2, col3) values ('A', 'B', 0) ON CONFLICT DO NOTHING;
Однако это не работает:
INSERT INTO mytable(col1, col2, col3) VALUES ('A', 'B', 0)
ON CONFLICT
DO UPDATE SET col3 = EXCLUDED.col3 + 1;
ОШИБКА: ON CONFLICT DO UPDATE требует спецификации вывода или имени ограничения
Это также не работает:
INSERT INTO mytable(col1, col2, col3) VALUES ('A', 'B', 0)
ON CONFLICT (col1, col2)
DO UPDATE SET col3 = EXCLUDED.col3 + 1;
ОШИБКА: нет единственного ограничения исключения или исключения, соответствующего спецификации ON CONFLICT
Этот синтаксис, по-видимому, предназначен для единого составного уникального ограничения по двум столбцам, а не для двух ограничений.
Есть ли способ сделать условное обновление, если нарушено одно ограничение? Этот вопрос Как обновить Postgres в конфликте на одном из двух столбцов? ссылается на него, но не предоставляет синтаксис.