dvs*_*kup 3 postgresql node.js pg-promise
是否有可能在PostgreSQL中执行多值upsert?我知道存在多值插入,如果违反了密钥则执行更新的"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')
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了这个问题并且找不到任何关于它的信息.
我有一个使用pg-promise的应用程序,我正在进行批处理.它可以工作,但它的速度非常慢(每隔5秒左右就像50行一样......).我想如果我可以取消批处理,而是正确构建这个多值upsert查询,它可以提高性能.
编辑:嗯......我只是自己尝试过,不,它不起作用.除非我做错了.所以现在我想我的问题已经改变了,实现这样的事情的好方法是什么?
多值upsert绝对是可能的,并且为什么插入...在冲突上...的一个重要部分被实现.
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;
Run Code Online (Sandbox Code Playgroud)
结果是
regress=> SELECT * FROM table1 ORDER BY col1;
col1 | col2
------+------
1 | foo
2 | bar
3 | baz
4 | turkey
(4 rows)
Run Code Online (Sandbox Code Playgroud)
如果文档不清楚,请向pgsql-general邮件列表提交适当的反馈.甚至更好,为文档提出补丁.
| 归档时间: |
|
| 查看次数: |
1251 次 |
| 最近记录: |