我的PHP脚本长期以来一直运行良好。它基本上执行对远程数据库的查询;使用postgreSQL API:
SELECT id,command FROM tablet_sync WHERE id>$certainNumber
Id字段是 int4 类型;和命令是文本类型。
正如我所说,它长期以来一直运作良好。但最近,我发现有时命令字段可能有点(但不是极端)大;大约10000个字符或更多。
那么,当该查询找到一行时,其字段命令大于特定数量的字符(约9000);它不起作用。
我应该告诉我,如果这个查询是在PostgreSQL客户端中执行的,那么就说pgAdmin,它运行得很好(当然,10000字节的数据不是大量的数据!)。 但是,如果我从我的PHP脚本中创建它,它就不起作用。
我向您提供了解决问题可能有用的所有其他信息:
*的 更新 * 我可以认为PostgreSQL远程数据库服务器正在抛出这些错误:
尽管有这些错误,PHP调用仍然没有结束......
* 04/08更新了 *
感谢您的回答@regilero。我做了一些测试:
更改超时值无论如何都没有效果。
由于SHOW AL命令,我发现了一些配置字段 客户端和服务器端不同:所有语言环境(lc_collate, lc_message等;); 在服务器端设置为UTF-8,同时在 客户端设置为English_United States.1252。的 max_fsm_pages 设定为153600;不到客户端。我发现postgreSQL版本在客户端和服务器端也是不同的:分别是8.3.1和8.3.9。 shared_buffer 值设置也不同:32MB和24MB;客户端和服务器。没有找到更多相关的差异。
答案 0 :(得分:1)
这似乎是一个超时问题。
在postgresql会话端,您可以尝试在查询之前添加这些命令:
set statement_timeout to 10000;
这是以ms为单位的值,您也可以尝试将其设置为0(无限)。
如果它来自会话中的tcp问题,您可以调整这3个设置:
set tcp_keepalives_count to 10;
set tcp_keepalives_idle to 2;
set tcp_keepalives_interval to 1;
或其他值(这里只是一个随机尝试)。这意味着,尝试每2秒进行一次'tcp keepalive ping',如果失败则重试每1秒,并在死前允许10次重试(0表示系统默认)。
现在问题也可能在客户端,你使用哪个postgresql连接器?此连接使用的optioinnal设置是什么(连接字符串,默认conf值,...)。 “SHOW ALL;
”将列出每个设置,您应该尝试从PHP客户端执行此查询并将结果存储在某处,然后检查此列表中的每个设置,并使用pgadmin中的相同查询检查差异。 / p>