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;
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;