【发布时间】:2017-06-30 10:35:09
【问题描述】:
在谷歌上搜索了很多之后,我的问题描述如下:
CREATE TABLE security (
id SERIAL PRIMARY KEY,
vendor VARCHAR(20),
external_id VARCHAR(20),
extinct BOOLEAN DEFAULT FALSE
);
CREATE UNIQUE INDEX unique_vendor ON security(vendor, extinct) where vendor is not null;
CREATE UNIQUE INDEX unique_external_id ON security(external_id, extinct) where external_id is not null;
尝试插入值:
insert into security (vendor, external_id, extinct)
values('Legion', 'LGNONE', false)
ON CONFLICT(vendor, external_id, extinct) DO UPDATE
SET vendor = 'Legion', external_id = 'LGNONE', extinct = false;
结果:
[42P10] ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification
尽管如此(根据规范):
insert into security (vendor, external_id, extinct)
values('Legion', 'LGNONE', false)
ON CONFLICT DO NOTHING;
PostgreSQL documentation stands that it should work
PostgreSQL v9.5
我的目标是想办法在这个表的多个可空列上创建唯一索引,并在 UPSERT 上用新行更新旧行
【问题讨论】:
标签: sql postgresql indexing unique upsert