我想在一个语句中更新PostgreSQL中的多行.有没有办法做以下的事情?
UPDATE table
SET
column_a = 1 where column_b = '123',
column_a = 2 where column_b = '345'
Run Code Online (Sandbox Code Playgroud) 我想用一个INSERT查询插入多行,例如:
INSERT INTO tmp(col_a,col_b) VALUES('a1','b1'),('a2','b2')...
Run Code Online (Sandbox Code Playgroud)
有没有办法轻松地做到这一点,最好是这样的对象数组:
[{col_a:'a1',col_b:'b1'},{col_a:'a2',col_b:'b2'}]
Run Code Online (Sandbox Code Playgroud)
我可能最终在一个块中有500条记录,因此运行多个查询是不可取的.
到目前为止,我只能为一个对象做到这一点:
INSERT INTO tmp(col_a,col_b) VALUES(${col_a},${col_b})
Run Code Online (Sandbox Code Playgroud)
作为一个附带问题:使用${}符号的插入是否可以防止SQL注入?
我正在使用Node js和Postgresql,并试图在连接实现中最有效率.
我看到pg-promise建立在node-postgres之上,而node-postgres使用pg-pool来管理池.
我还读到"一次超过100个客户端是一件非常糟糕的事情"(node-postgres).
我正在使用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查询,它可以提高性能.
编辑:嗯......我只是自己尝试过,不,它不起作用.除非我做错了.所以现在我想我的问题已经改变了,实现这样的事情的好方法是什么?