问题描述
我的INSERT正在使用语法
INSERT INTO t SELECT * FROM fdw_t
ON CONFLICT DO nothing;
现在我需要通过添加UPDATE来更改它,但是保留所有相同的条件,该怎么做?
这是可行的,但不是“所有相同的结论”:
INSERT INTO t
SELECT * FROM fdw_t
ON CONFLICT (id) -- why I need to add this specific and not generic condiction???
DO UPDATE
SET id = EXCLUDED.id,etc1 = EXCLUDED.etc1,etc2 = EXCLUDED.etc2;
我还需要在UPDATE中“所有可用约束”,而不仅仅是一个约束。 Guide about conflict_target说
conflict_target必须提供
那么,如何提供“所有可用约束”?
解决方法
我不能说此限制是由于基本问题还是实施考虑。
您将不得不诉诸传统技术:编写一个无限循环,或者尝试尝试INSERT
和UPDATE
,并在其中一项操作成功后立即退出循环。