Postgresql
如果列不匹配,則插入行
我有一個具有唯一標識符的表
sid
,somecolumn
以及其他程序檢測行更改所需的布爾值changed
,我insert into ... on conflict (sid) DO UPDATE ...
用來插入尚未存在的數據,但我也想更新somecolumn
並設置changed
為 true,除非somecolumn
’ t 匹配排除之一。讓它更清楚一點
- 如果
sid
不存在,插入數據- 如果
sid
存在並且somecolumn
匹配排除的`somecolumn,什麼都不做- 如果
sid
存在somecolumn
且不匹配,則somecolumn
使用新值更新並設置changed
為 true有乾淨的方法嗎?我寧願在不進行多個查詢的情況下執行此操作,我在每個查詢中插入數百個值。
您可以將 WHERE 子句添加到 INSERT … ON CONFLICT 的 UPDATE 部分
insert into the_table (sid, somecolumn) values (...) on conflict (sid) do update set somecolumn = excluded.somecolumn, changed = true where the_table.somecolumn <> excluded.somecolumn;
如果需要處理使用中的 NULL
somecolumn
值where the_table.somecolumn is distinct from excluded.somecolumn