libpq 是否支持与 Oracle 的数组绑定等价的东西?

Does libpq support something equivalent of Oracle's array binds?

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;