“致命:数据库系统正在关闭”,同时创建与 PostgreSQL 的连接
Posted
技术标签:
【中文标题】“致命:数据库系统正在关闭”,同时创建与 PostgreSQL 的连接【英文标题】:"FATAL: the database system is shutting down" while creating connection to PostgreSQL 【发布时间】:2014-06-27 01:17:37 【问题描述】:我在创建与 PostgreSQL 9.2 服务器的 PostgreSQL JDBC 连接时收到 FATAL: the database system is shutting down
错误。我从 JDBC 得到的具体异常路径在这里:
Caused by: org.postgresql.util.PSQLException: FATAL: the database system is shutting down
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:398)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:173)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:64)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:136)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:29)
at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:21)
at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:31)
at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:393)
at org.postgresql.Driver.connect(Driver.java:267)
从各种日志文件(来自 PostgreSQL,来自我们的管理层,来自使用 PostgreSQL 的应用程序),我没有看到任何实际发生的数据库关闭(其他连接像往常一样创建到 PostgreSQL,没有从我们的管理层启动关闭等),但是在 PostgreSQL 服务器日志中,我确实看到了具有相同时间戳的错误消息:
2014-06-16 12:30:00.736 GMT LOG: connection received: host=127.0.0.1 port=38530
2014-06-16 12:30:00.737 GMT FATAL: the database system is shutting down
上网查了一下,得知PostgreSQL关闭连接的时候都会出现这个错误信息。
为什么 PostgreSQL 会拒绝给我一个新的连接?这可能是由某种资源争用引起的吗?如何从 PostgreSQL 本身获取有关错误的更多信息?
【问题讨论】:
进一步查看数据库服务器日志以了解它被关闭的原因。你用了pg_ctl stop
什么的?
PostgreSQL 安装端口是什么???
【参考方案1】:
这个问题原来是由于对 PostgreSQL 的严重误用造成的,我们的服务器在同一个数据目录上启动了两个 PostgreSQL 实例(它删除了postmaster.pid
并使用了新的端口号,所以正常的防范措施是针对这个行为被绕过)这解释了为什么日志没有包含任何有用的信息——它们被不拒绝连接的 PostgreSQL 实例覆盖。实际问题是由竞争的 PostgreSQL 实例之间的复杂交互引起的,我希望其他人也不会遇到这个问题!
【讨论】:
修复它的解决方案是什么? 你能在这里提供解决方案吗? 我的解决方案不是在同一组文件上运行两个 PostgreSQL 服务器。如果您没有手动删除postmaster.pid
文件,或者在删除时比我们更加小心,那么 PostgreSQL 旨在防止您这样做。【参考方案2】:
我们在重新启动服务器时遇到了这个问题。在这种情况下,重启并没有启动与 PostgreSql 的连接。只需检查状态:“/etc/init.d/postgresql status”,如果返回为:“no server running”,只需启动:“/etc/init.d/postgresql start”
【讨论】:
【参考方案3】:可能硬盘空间不足。
【讨论】:
以上是关于“致命:数据库系统正在关闭”,同时创建与 PostgreSQL 的连接的主要内容,如果未能解决你的问题,请参考以下文章