UPSERT
使用PostgreSQL。文件似乎表明
冲突目标
的
INSERT
语句可以是索引表达式
或
我的第一个尝试就是创建一个
UNIQUE
索引,它可以很好地与约束推断一起工作:
create table kv (key text, value text, extra text);
create unique index kv_key_value on kv(key, value);
insert into kv (key, value) values ('k1', 'v1');
insert into kv (key, value, extra) values ('k1', 'v1', 'e1')
on conflict (key, value) do update set extra=excluded.extra;
insert into kv (key, value, extra) values ('k1', 'v1', 'e1')
on conflict (kv_key_value) do update set extra=excluded.extra;
在描述上表时,我在“索引”下看到了以下内容:
"kv_key_value" UNIQUE, btree (key, value)
create table kv (
key text,
value text,
extra text,
constraint kv_key_value unique(key, value));
描述上表时,“Indexes:”的输出略有不同(“UNIQUE CONSTRAINT”与上一个示例中的“UNIQUE”):
"kv_key_value" UNIQUE CONSTRAINT, btree (key, value)
insert into kv (key, value, extra) values ('k1', 'v1', 'e1')
on conflict (kv_key_value) do update set extra=excluded.extra;
ERROR: column "kv_key_value" does not exist
LINE 2: on conflict (kv_key_value) do update set extra=exclude...
我是不是误解了什么?我完全明白我可以使用等价的表达式并依赖于约束推理,但是我想知道为什么当文档使它听起来像应该的那样时,约束名称似乎不起作用?