PostgreSQL 9.2 - 条件插入因重复键违规而失败
PostgreSQL 9.2 - Conditional insert fails with duplicate key violation
以下条件插入仅在项目已存在时有效! (不继续尝试插入)。
如果项目不存在,我得到重复键违规(重复键违反唯一约束)!
使用 postgresql 9.2
INSERT INTO mytable (mytable_handle, title, description)
select '1234/9876', 'Title here', 'description here'
from mytable where not exists
(select 1 from mytable where mytable_handle = '1234/9876')
(mytable_handle 是 pkey)
这个查询:
select '1234', 'Title here', 'description here'
from mytable where not exists
(select 1 from mytable where mytable_handle = '1234');
将 return 元组 '1234', 'Title here', 'description here'
一次 每个 行已经存在于 table,如果 mytable_handle
值不存在。 运行 select
本身,你会亲眼看到
你想要:
select '1234', 'Title here', 'description here'
where not exists
(select 1 from mytable where mytable_handle = '1234');
SQLFiddle 示例:http://sqlfiddle.com/#!15/b331f/1
以下条件插入仅在项目已存在时有效! (不继续尝试插入)。
如果项目不存在,我得到重复键违规(重复键违反唯一约束)! 使用 postgresql 9.2
INSERT INTO mytable (mytable_handle, title, description)
select '1234/9876', 'Title here', 'description here'
from mytable where not exists
(select 1 from mytable where mytable_handle = '1234/9876')
(mytable_handle 是 pkey)
这个查询:
select '1234', 'Title here', 'description here'
from mytable where not exists
(select 1 from mytable where mytable_handle = '1234');
将 return 元组 '1234', 'Title here', 'description here'
一次 每个 行已经存在于 table,如果 mytable_handle
值不存在。 运行 select
本身,你会亲眼看到
你想要:
select '1234', 'Title here', 'description here'
where not exists
(select 1 from mytable where mytable_handle = '1234');
SQLFiddle 示例:http://sqlfiddle.com/#!15/b331f/1