use*_*521 16 postgresql duplication upsert postgresql-10
我在列a和b. 我需要这样的东西:
insert into my_table (a, b) values (1, 2), (1, 2)
on conflict (a) do update set c = 'a_violation'
on conflict (b) do update set c = 'b_violation'
Run Code Online (Sandbox Code Playgroud)
所以一般我想根据冲突目标进行不同的更新 - 不支持上面的语法(只支持一个on conflict语句)。有没有其他方法可以做到这一点?
Erw*_*ter 11
您的示例建议VALUES子句本身中有重复的行- 这将导致:
错误:ON CONFLICT DO UPDATE 命令不能再次影响行
可以通过折叠输入中的重复项来解决。看:
但是一个相关的问题会影响您的整体查询,这并不容易克服。
如果同一输入行触发多个唯一违规怎么办?
如果多个输入行触发相同的唯一违规怎么办?
如果多个输入行触发同一目标行的不同唯一违规,该怎么办?
以及它们的组合。
Postgres 开发人员可能不想打开这个蠕虫罐头,而是将 UPSERT 功能限制为单个约束。
ON CONFLICT DO NOTHING- 没有冲突目标 - 适用于任何适用的违规行为。此变体的替代操作(“什么都不做”)是明确的。
您必须更加具体(还有关于并发性和可能的写入负载)才能获得更具体的答案。
| 归档时间: |
|
| 查看次数: |
12979 次 |
| 最近记录: |