我有一个带有postgresql后端的php应用程序,使用PDO与数据库进行交互。它已启动并运行了几个月没有问题,但今晚突然间我在页面加载时遇到持续的500错误,需要数据库连接,服务器的error.log文件显示:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08006]
[7] FATAL: connection limit exceeded for non-superusers'
连接到数据库的用户的rollconnlimit为-1,因此这不应该是个问题。 当我查询pg_stat_activity表时,我看不到任何连接。
任何想法会导致什么?我没有更改任何会导致更多或更少数据库连接的代码。
我很乐意发布一些代码,但不确定我的代码的哪些部分会在没有指导可能导致问题的指导下发布。
答案 0 :(得分:3)
Postgres错误的直接原因可能是max_connections
。
但是我在你的评论中读到的,你应该真的修复那个。转到每个记录的数据库,然后在应用程序中本地循环是最糟糕的情况。
一次检索所有行并在应用程序中处理它们远非优越,但仍然不是很好。您应该尽可能拥有数据库引擎流程数据,并仅检索应用程序中所需的结果。这就是数据库引擎擅长的。无需发送大量数据,只实际使用了一小部分数据。我wrote more here。