ON CONFLICT子句,如何用DO UPDATE代替DO NOTHING?

问题描述

我的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必须提供

那么,如何提供“所有可用约束”?

解决方法

我不能说此限制是由于基本问题还是实施考虑。

您将不得不诉诸传统技术:编写一个无限循环,或者尝试尝试INSERTUPDATE,并在其中一项操作成功后立即退出循环。