我有一个php脚本,用于在postgresql数据库中存储一些信息。在这个脚本中,我使用一个函数来存储关于某些数据库操作的一些日志。在测试期间,我发现我的脚本将在4-5秒后记录与pg_connect函数相关的错误 - 这对我来说是个大问题。
您可以在下面找到我的测试和结果:
案例1 - pg_connect函数没有错误:
Log("START DBCONN - without errors");
$dbconn = pg_connect("host=$host dbname=$dbname user=$dbuser password=$dbpassword");
if(!$dbconn){
Log("ERROR: Could not connect to database");
}
Log("END");
案例2 - pg_connect中的错误:
Log("START DBCONN - with errors");
$dbconn = pg_connect("host=$host12 dbname=$dbname user=$dbuser password=$dbpassword");
if(!$dbconn){
Log("ERROR: Could not connect to database");
}
Log("END");
结果
案例1:
[12-Jan-2016 09:31:21] START DBCONN - without errors
[12-Jan-2016 09:31:21] END
案例2:
[12-Jan-2016 09:31:59] START DBCONN - with errors
[12-Jan-2016 09:32:03] ERROR: Could not connect to database
[12-Jan-2016 09:32:03] END
你知道解决方案吗?因为,我找不到一个,但是:(
感谢您的帮助!
答案 0 :(得分:2)
根据错误的性质,可能有不同的原因:
这两个问题很难以干净的方式解决。
还有一些不应导致延迟的错误情况,例如:
答案 1 :(得分:1)
可以使用connect_timeout
来电中的pg_connect()
选项调整无响应远程主机失败的时间。
PHP pg_connect()
documentation没有提供有关connect_timeout
的任何详细信息,但它只是将其传递给cp客户端库libpq,并将其记录为:
http://www.postgresql.org/docs/current/static/libpq-connect.html
<强> connect_timeout 强>
最大等待连接,以秒为单位(写为十进制整数字符串)。零或未指定意味着无限期等待。它是 不建议使用少于2秒的超时。
然而,问题中显示的失败前4秒对于TCP问题似乎是合理的。如果您希望数据库主机出现重复出现的网络错误,则可能需要考虑使用pgBouncer等本地连接池,以使Web环境与这些高延迟错误隔离。