【发布时间】:2011-10-18 22:39:07
【问题描述】:
我有一个运行良好的 PHP 脚本很长时间了。它基本上对远程数据库执行查询;使用 postgreSQL API:
SELECT id,command FROM tablet_sync WHERE id>$certainNumber
Id 字段为 int4 类型;并且 command 是 text 类型。
正如我所说,它已经运行了很长时间。但最近,我发现有时 command 字段可能有点大(但不是特别大);大约 10000 个字符或更多。
好吧,当该查询找到其字段 command 大于一定数量的字符(大约 9000)的行时;它不起作用。
- Apache 调用永无止境。
- 未发现错误消息(PHP/Apache 日志文件、客户端和服务器)。
我应该说,如果这个查询是在 PostgreSQL 客户端执行的,比如说 pgAdmin,它可以完美地工作(当然,10000 字节的数据并不是大量的数据!)。 但是如果我从我的 PHP 脚本中创建它就行不通了。
我给你所有其他可能有助于解决问题的信息:
- 服务器和客户端具有相同的 Apache amd PHP 版本:2.2 和 5.3.0;分别。
- 客户端和服务器不在同一台机器上
- 如果我在 PHP 脚本文件中执行查询时限制要恢复的数据量; 有效!。 (例如:SELECT id,(CAST command AS varchar(9000) FROM tablet_sync WHERE id>$certainNumber)
*更新* 我可以推测 PostgreSQL 远程数据库服务器正在抛出这些错误:
- LOG:无法从客户端接收数据:连接超时
- 日志:客户端连接出现意外 EOF
尽管有这些错误,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;客户端和服务器,分别。未发现更多相关差异。
- 我使用PHP API connector to PostgreSQL,从现在开始一直运行良好。 PHP 错误日志文件没有显示任何内容。
【问题讨论】:
-
如何执行查询? “PostgreSQL API”是指 pg_* 函数吗?
-
你也检查过 MySQL 错误日志吗?远射……
-
我的意思是 Postgres,freudian slip,只是在回答一个 MySQL 问题。
-
@bertzzie;是的,我正在使用 pg_* 函数,从现在开始它们一直运行良好。我还检查了 PostgreSQL lof 文件;并且没有发现错误。它仅在我手动停止呼叫时显示连接错误(我单击 Firefox 上的停止按钮)。我还应该告诉被调用的 PHP 脚本位于客户端计算机(localhost)中;但数据库位于远程服务器中。
-
您可以尝试使用更新的 PHP 版本(可能是 5.3.8)吗?
标签: php apache postgresql select