pg_query_params 24464 个参数失败,它有上限吗?(菲律宾比索)


pg_query_params failing at 24464 parameters, does it have a cap? (PHP)

我已经在 8 个字段中构建了一个包含 10,000 行的大型多行插入查询,这意味着我将 90,000 个值作为数据数组传递给pg_query_params。

我收到此错误:

警告:pg_query_params():查询失败:错误:绑定消息 提供 24464 个参数,但预准备语句 " 需要 90000 class.postgresql.php在第57行

我已经仔细检查了 SQL 和数据数组,肯定有 90,000 个值被传递,但由于某种原因,它只检测到 24464 的幻数。思潮?

postgres使用的过线协议表明使用的参数数量作为有符号的2字节整数传递,90000显然不适合。

看起来 php 驱动程序只是忽略了不适合 2 字节整数的内容 - 90000 是0x015f90,如果你只取其中的低 2 个字节,那么你会得到0x5f90即 24464。将刀片分成小批量,您应该没问题

您似乎正在尝试使用大型多记录INSERT语句将数据批量加载到 PostgreSQL 数据库中。这是低效和笨拙的,尽管比使用没有周围显式事务的单个插入要好得多。你应该重写你的代码来使用pg_copy_from(),通过PHP的postgresql驱动程序提供给它的漂亮接口,利用PostgreSQL的高效COPY批量加载接口><。

严肃地说,COPY是要走的路,看起来 Pg PHP 驱动程序支持它。如果您需要更多控制,似乎您也可以使用 pg_put_line() 和显式COPY来做到这一点。