如何解决ON CONFLICT 中的 Postgresql 多列
如果该行中的每个单元格都是唯一的(当然不包括 id 字段),我只想插入一行,所以我尝试了这个
INSERT INTO test (val,val2,val3) VALUES ('g','h','j')
ON CONFLICT (val,val3) DO NOTHING RETURNING id;
但事实证明这是无效的,因为传递给 ON CONFLICT
的字段必须受 UNIQUE
约束。但我不希望那样,我只希望 val、val2 和 var3 的排列是唯一的,我不希望它们单独唯一。在插入之后,无论是否插入,我都想返回 id 字段。我该怎么做?
解决方法
我通过像这样创建 UNIQUE 解决了这个问题:
CREATE TABLE test (
id SERIAL,val varchar(100),val2 varchar(100),val3 varchar(100),UNIQUE (val,val2,val3)
);
然后像这样插入:
INSERT INTO test (val,val3) VALUES ('a','b','c') ON CONFLICT (val,val3) DO UPDATE SET val='a' RETURNING id;
即使没有更新,也会返回id
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。