【发布时间】:2019-01-11 15:15:55
【问题描述】:
如果更新的版本不会违反主键约束,我想更新我的 postgres 数据库中的行。如果可以,我想保留该行。
假设表在col1, col2, col3 上有主键,如果我运行这样的查询:
UPDATE table SET (col1, col2) = ('A', 'B')
WHERE col1='D' AND col2='E';
如果存在两个条目,查询将失败,我将收到重复键错误:
'A', 'B', 'C'
'D', 'E', 'C'
即col3 在现有行和要更新的行之间是相同的。
如果我是INSERTing 行,我会使用ON CONFLICT DO NOTHING,但我找不到UPDATE 的实现。是否存在等价物?
【问题讨论】:
-
如果你知道它存在,你可以简单地把它变成一个 INSERT
标签: sql postgresql sql-update subquery sql-insert