重启Heroku Postgres Dev DB

时间:2012-08-14 09:06:46

标签: postgresql heroku playframework-2.0

我从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

4 个答案:

答案 0 :(得分:14)

您在那里的错误消息没有理由重启数据库;这不是数据库问题。您的应用程序持有太多连接,可能是因为您忘记设置其连接池。这不是数据库服务器问题,您无需重新启动数据库服务器即可修复它。

如果您停止Play应用程序或重新配置其连接池,问题就会消失。

另一种选择是将您的Heroku实例置于维护模式,然后再将其取出。

由于heroku doesn't allow you to connect as a superuser(出于好的理由),您不能像使用普通的PostgreSQL那样使用保留的超级用户插槽来连接和管理连接。

另见:

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

http://wiki.postgresql.org/wiki/Number_Of_Database_Connections

如果您是非Heroku用户,则会发现:

使用普通的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应用程序控制台中可以检查的其他内容。