2

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

我收到了这个错误:

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

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

4

2 回答 2

7

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

看起来 php 驱动程序只是忽略了不适合 2 字节整数的内容 - 90000 是 0x015f90,如果你只取它的低 2 个字节,那么你会得到 0x5f90,即 24464。将插入分成更小的批次,你应该没事

于 2012-05-29T08:06:57.680 回答
4

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

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

于 2012-05-29T08:20:33.830 回答