Heroku“psql:FATAL:剩余的连接槽保留给非复制超级用户连接”

我正在用Postgresql后端开发Heroku上的应用程序。 定期地,当从CLI尝试访问数据库时,以及在服务器上加载页面时,出现此错误消息:

psql: FATAL: remaining connection slots are reserved for non-replication superuser connections 

任何人之前看过这个或者可以指出我的方向是正确的吗?

您可能需要增加max_connectionsconfiguration设置,或者(可能更好) 使用连接池来通过较小的连接池路由大量的用户请求。

https://wiki.postgresql.org/wiki/Number_Of_Database_Connections

请参阅Heroku“psql:FATAL:其余连接插槽保留给非复制超级用户连接” :

Heroku有时会遇到数据库负载平衡的问题。

André Laszlomarkshizmarkshiz和我都报道过在这个问题上的评论。

为了节省您的支持电话,这里是我从Heroku支持得到的类似问题的答复:

你好,

业余爱好层数据库的一个局限性是突击维护。 许多业余爱好数据库运行在一个共享服务器上,为了硬件维护的目的,我们偶尔需要重新启动服务器,或者将数据库迁移到另一台服务器进行负载平衡。 发生这种情况时,您会在日志中看到错误或者连接出现问题。 如果服务器正在重新启动,则数据库可能需要15分钟或更长时间才能重新联机。

大多数维护连接池的应用程序(例如Rails中的ActiveRecord)都可以打开一个到数据库的新连接。 但是,在某些情况下,应用程序将无法重新连接。 如果发生这种情况,您可以重新启动您的应用程序,使其恢复在线状态。

这是我们build议不要为关键生产应用程序运行业务数据库的原因之一。 标准和高级数据库包括停机事件的通知,并且性能和稳定性要高得多。 您可以使用pg:copy来迁移到标准或高级计划。

如果这种情况持续下去,您可以尝试使用heroku插件configuration新数据库(在不同的服务器上):添加,然后使用pg:copy移动数据。 请记住,兴趣层规则适用于$ 9基本计划以及免费数据库。

谢谢,布拉德利

我其实试图在django端使用以下方法实现连接池:

https://github.com/gmcguire/django-db-pool

但是我仍然收到了这个错误,尽pipe将可用连接的数量减less到低于20个开放连接的标准开发数据库配额。

这里有一篇关于如何将postgresql数据库移动到免费/低价的Amazon EC2层的文章。 这将允许您将max_connections设置得更高。 这也将允许您使用PGBouncer在数据库级别连接连接。

http://www.askthepony.com/blog/2011/07/getting-django-on-heroku-prancing-8-times-faster/

更新:

Heroku回应了我的公开票,并表示我的数据库在他们的networking中是不正确的负载平衡。 他们说改进他们的系统应该可以防止将来出现类似的问题。 尽pipe如此,支持手动重新安置我的数据库和性能显着改善。

这个例外发生在我忘记closures连接时

通过以下命令重新启动postgres数据库:

 postgres -D /usr/local/var/postgres