Rit*_*ani 5 sql postgresql upsert
我有一项气流工作,每天通过 INSERT ON CONFLICT 语句更新表的列。该表包含一个枚举类型的字段,当通过作业插入/更新行时,该字段updated_mode设置为自动;如果手动完成,则手动插入/更新行。updated_mode现在,我希望我的工作仅在设置为automatic时才更新行。我怎样才能做到这一点?
基本上,我想做类似的事情:
Insert into table (data) values (data) on conflict (fields) if updated_mode=automatic set data=excluded.data else do nothing
Run Code Online (Sandbox Code Playgroud)
您需要WHERE中的子句ON CONFLICT。
INSERT INTO table_data
VALUES (data)
ON CONFLICT (fields)
DO UPDATE SET data=excluded.data
WHERE EXCLUDED.updated_mode='automatic'
Run Code Online (Sandbox Code Playgroud)
看看数据库小提琴:https://www.db-fiddle.com/f/qwRzRSFaJx4KDMYn2GEXTe/1
您应该使用常规 WHERE 条件。神奇的排除记录将包含现有的冲突记录。像这样的东西:
Insert into table (data) values (data)
on conflict (fields) do update
set data=excluded.data
WHERE updated_mode=automatic
and fields = EXCLUDEED.fields
Run Code Online (Sandbox Code Playgroud)
我假设fields是冲突字段,表名称是data
| 归档时间: |
|
| 查看次数: |
3363 次 |
| 最近记录: |