是否可以在 PostgreSQL 中执行多值更新插入?我知道存在多值插入,就像“ON CONFLICT”关键字在密钥被违反时执行更新一样......但是是否有可能将两者结合在一起?像这样的事情...
INSERT INTO table1(col1, col2) VALUES (1, 'foo'), (2,'bar'), (3,'baz')
ON CONFLICT ON CONSTRAINT theConstraint DO
UPDATE SET (col2) = ('foo'), ('bar'), ('baz')
我用谷歌搜索了这一点,但找不到任何与此相关的内容。
我有一个使用 pg-promise 的应用程序,我正在执行批处理。它可以工作,但速度慢得可怕(就像每 5 秒左右 50 行左右......)。我想如果我可以取消批处理并正确构建这个多值更新插入查询,它可以提高性能。
编辑:
嗯...我只是自己尝试了一下,不,它不起作用。除非我做错了。所以现在我想我的问题已经变成了,实现这样的事情有什么好方法吗?
多值更新插入绝对是可能的,并且是实现冲突时插入...的一个重要部分。
CREATE TABLE table1(col1 int, col2 text, constraint theconstraint unique(col1));
INSERT INTO table1 VALUES (1, 'parrot'), (4, 'turkey');
INSERT INTO table1 VALUES (1, 'foo'), (2,'bar'), (3,'baz')
ON CONFLICT ON CONSTRAINT theconstraint
DO UPDATE SET col2 = EXCLUDED.col2;
结果是
regress=> SELECT * FROM table1 ORDER BY col1;
col1 | col2
------+------
1 | foo
2 | bar
3 | baz
4 | turkey
(4 rows)
如果文档不清楚,请向 pgsql-general 邮件列表提交适当的反馈。或者更好的是,建议对文档进行补丁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)