psql: 致命错误:数据库“db_name”当前不接受连接。

4

我有一个运行在Postgres 9.3.5数据库上的Rails应用程序。这个应用程序已经在我的开发环境中运行了一段时间。今天我应用了一个Rails迁移,然后当我尝试运行 rake db:reset 时,我收到了以下错误:

 psql: FATAL: database "db_name" is not currently accepting connections

现在,当我尝试运行任何psql或rake db任务时,这是唯一的响应。例如:

  $ psql -d db_name
  psql: FATAL:  database "db_name" is not currently accepting connections

我可以在数据库列表中看到db_name,并且它的所有者是正确的。
什么会导致“当前不接受连接”的状态,该如何解决?
2个回答

12

只有当pg_catalog.pg_database中的datallowconn设置为false时,才会发出该消息。这用于保护template0数据库免受意外修改,但PostgreSQL本身通常不会这样做。

很难想象你如何在另一个数据库中进入那种状态,除非你手动更新系统目录。

有一个未记录的选项可以使用ALTER DATABASE,即allow_connections = false ,它将产生相同的结果,但似乎更不可能这样做。

如果你以某种方式陷入了一个不是预留模板的数据库的这种情况,你可以

UPDATE pg_database SET datallowconn = true WHERE datname = 'my_database';

错误:关系“pg_database”的列“datallowcon”不存在。 - Riz

2

使用dropdb手动删除数据库成功:

$ dropdb 'db_name'

然后我就可以使用db:setup来填充一个全新的数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接