问题描述
Oracle有一些他们称为数组绑定(from docs)的东西,其中发送的sql可能是UPDATE mytable SET val = :2 WHERE id = :1
以及带有内容的数组绑定:
1 | val1
2 | val2
3 | val3
(PS。数组的大小为> 1000个项目,其中3个项目是用于说明的。)
这是有效的,并且可以单次往返服务器。 使用libpq也可以吗?
解决方法
不,PostgreSQL没有这样的东西。
我将使用由PQprepare
创建的命名预处理语句,并使用PQexecPrepared
对每一行执行该语句。想法相似,但方法不同。
如果您打算最大程度地减少往返次数,则可以执行以下操作:
UPDATE mytable m
SET val = t.val
from (
values (:1,:2),(:3,:4),(:5,:6),....
) as t(id,val)
WHERE t.id = m.id;