libpq是否支持与Oracle数组绑定等效的功能?

问题描述

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;