我在8个字段中构建了一个10,000行的大型多行插入查询,这意味着我将90,000个值传递给pg_query_params作为数据数组。
我收到了这个错误:
警告:pg_query_params():查询失败:错误:绑定消息 提供24464参数,但准备好的声明“”需要90000英寸 第57行的class.postgresql.php
我已经仔细检查了SQL和数据数组,肯定有90,000个值被传递,但由于某种原因,它只能检测到24464的幻数。想法?
答案 0 :(得分:6)
postgres使用的over the wire protocol表示所使用的参数数量是作为带符号的2字节整数传递的,90000显然不适合。
看起来php驱动程序只是忽略了不适合2字节整数的东西 - 90000是0x015f90,如果你只取低2字节那么你就得到0x5f90这是24464.将你的插入分成小批量你应该没问题
答案 1 :(得分:3)
< clippy>您似乎正在尝试使用大型多记录INSERT
语句将数据批量加载到PostgreSQL数据库中。这是低效且笨拙的,但比使用单个插入而不包围显式事务要好得多。您应该重写代码以使用pg_copy_from(),通过PHP的postgresql驱动程序提供的漂亮接口,利用PostgreSQL的高效COPY
批量加载接口。< / clippy>
严肃地说,COPY
是要走的路,看起来像Pg PHP驱动程序支持它。如果您需要更多控制权,似乎您也可以使用pg_put_line()和明确COPY
来执行此操作。