【问题标题】:Restart Heroku Postgres Dev DB重启 Heroku Postgres 开发数据库
【发布时间】:2012-08-10 13:18:56
【问题描述】:

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

【问题讨论】:

标签: postgresql heroku playframework-2.0


【解决方案1】:

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

如果您停止 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 或 psql 作为超级用户(默认为 postgres 用户)连接到 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 = &lt;target-user-name&gt;

【讨论】:

  • 我实际上能够使用上面的 SQL 语句来终止 Heroku PostgreSQL 实例上的连接。我不确定超级用户权限,但这是在共享数据库上。使用heroku pg:psql 命令,我能够运行第一个 SQL 语句并查看所有连接,但是因为它是一个共享数据库,所以查询除了我们的数据库连接之外的所有列都被阻止了。然后我可以运行第二条稍作修改的 SQL 语句:SELECT procpid, pg_terminate_backend(procpid) FROM pg_stat_activity WHERE procpid &lt;&gt; pg_backend_pid() AND usename = '&lt;your_username&gt;';
【解决方案2】:

我想我应该只是添加这个来回复上一个答案,但我不知道该怎么做,所以......

作为接受答案线程中 Liron Yahdav 评论的更新:“发现此问题的非 Heroku 用户”解决方案在 Heroku PostgreSQL 开发数据库上为我工作,但对 Liron 提供的查询稍作修改。这是我修改后的查询:SELECT pid, pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid &lt;&gt; pg_backend_pid() AND usename='&lt;your_username&gt;';

好像procpid变成了pid。

【讨论】:

    【解决方案3】:

    没有办法重新启动整个数据库。不过,heroku 提供了一种简单的方法来停止所有连接,从而解决了大多数情况下的问题:

    heroku pg:killall

    【讨论】:

    • 这解决了我的问题。除了 SELECT 之外,没有其他 SQL 查询在运行 b4。
    猜你喜欢
    • 2013-10-26
    • 2014-05-30
    • 2013-08-17
    • 2013-08-03
    • 2015-10-12
    • 2012-05-31
    • 1970-01-01
    • 2019-11-19
    • 2019-06-24
    相关资源
    最近更新 更多