我从 Play 2.0.3 java 应用程序中收到此错误。如何重新启动 Heroku Postgres Dev DB?我在 Heroku 帮助中心找不到任何重启数据库的说明。
app[web.1]: Caused by: org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections
我从 Play 2.0.3 java 应用程序中收到此错误。如何重新启动 Heroku Postgres Dev DB?我在 Heroku 帮助中心找不到任何重启数据库的说明。
app[web.1]: Caused by: org.postgresql.util.PSQLException: FATAL: remaining connection slots are reserved for non-replication superuser connections
您收到的错误消息没有理由重新启动数据库;这不是数据库问题。您的应用程序持有太多连接,可能是因为您忘记设置其连接池。这不是数据库服务器问题,您可以在不重新启动数据库服务器的情况下修复它。
如果您停止 Play 应用程序或重新配置其连接池,问题就会消失。
另一种选择是将您的 Heroku 实例置于维护模式,然后再次将其取出。
由于heroku 不允许您以超级用户身份连接(有充分的理由),因此您不能像使用普通 PostgreSQL 一样使用保留的超级用户插槽来连接和管理连接。
也可以看看:
Heroku“psql: FATAL: 剩余的连接槽是为非复制超级用户连接保留的”
http://wiki.postgresql.org/wiki/Number_Of_Database_Connections
使用普通 PostgreSQL,您可以使用与服务器的 PostgreSQL 连接断开客户端与服务器端的连接。看看它怎么说有一个为“超级用户连接”保留的插槽?使用 PgAdmin-III 或 .作为超级用户(postgres
默认为用户)连接到 Pg psql
。
连接后,您可以看到其他客户端:
SELECT * FROM pg_stat_activity;
如果您想终止除您自己之外的每个连接,您可以运行:
SELECT procpid, pg_terminate_backend(procpid)
FROM pg_stat_activity WHERE procpid <> pg_backend_pid();
添加AND datname = current_database
和/或AND usename = <target-user-name>
视情况而定。
我想我应该在回复之前的答案时添加这个,但我不知道该怎么做,所以......
作为对接受答案线程中 Liron Yahdav 评论的更新:“发现此问题的非 Heroku 用户”解决方案在 Heroku PostgreSQL 开发数据库上为我工作,但对 Liron 提供的查询稍作修改。这是我修改后的查询:SELECT pid, pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND usename='<your_username>';
procpid 似乎已更改为 pid。
没有办法重新启动整个数据库。不过,heroku 提供了一种简单的方法来停止所有连接,从而解决了大多数情况下的问题:
heroku pg:killall