我从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
答案 0 :(得分:14)
您在那里的错误消息没有理由重启数据库;这不是数据库问题。您的应用程序持有太多连接,可能是因为您忘记设置其连接池。这不是数据库服务器问题,您无需重新启动数据库服务器即可修复它。
如果您停止Play应用程序或重新配置其连接池,问题就会消失。
另一种选择是将您的Heroku实例置于维护模式,然后再将其取出。
由于heroku doesn't allow you to connect as a superuser(出于好的理由),您不能像使用普通的PostgreSQL那样使用保留的超级用户插槽来连接和管理连接。
另见:
http://wiki.postgresql.org/wiki/Number_Of_Database_Connections
使用普通的PostgreSQL,您可以使用与服务器的PostgreSQL连接断开客户端与服务器端的连接。看看它是如何为“超级用户连接”保留一个插槽?使用PgAdmin-III或postgres
以超级用户(默认为psql
用户)连接到Pg。
连接后,您可以看到其他客户:
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>
。
答案 1 :(得分:7)
我想我应该在回答上一个答案时添加这个,但我无法弄清楚如何做到这一点,所以......
作为对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。
答案 2 :(得分:2)
无法重新启动整个数据库。虽然,heroku提供了一种简单的方法来阻止在大多数情况下解决问题的所有连接:
heroku pg:killall
答案 3 :(得分:-9)
实际上,当你想在heroku上重置postgre数据库时,有一个运行命令:
heroku pg:reset HEROKU_POSTGRESQL_MAGENTA -a app_name
确保将HEROKU_POSTGRESQL_MAGENTA替换为您的数据库名称,例如HEROKU_POSTGRESQL_BLACK或您在heroku应用程序控制台中可以检查的其他内容。