Postgresql

在 Postgres UPSERT 中有條件地設置值

  • May 7, 2016

我們有一個通過UPSERT實現的功能on conflict do set。如何在 set 語句中有條件地設置值,例如

if(excluded.col1 is null) col1=table.col1 else col1=excluded.col1

我們正在使用 Postgres 9.5。

...
SET   col1 = COALESCE(excluded.col1, table.col1)
...

當然,兩個表都必須是可見的。

如果您正在更新子句table1會更有效WHERE

...
SET   col1 = excluded.col1
WHERE excluded.col1 IS NOT NULL
AND   excluded.col1 IS DISTINCT FROM table1.col1 -- to avoid empty updates
...

關於添加的第二個條件:

引用自:https://dba.stackexchange.com/questions/137698