我的 PostgreSQL 服务器意外重启并显示以下消息:
2017-08-16 03:44:34 GMT LOG: received fast shutdown request
2017-08-16 03:44:34 GMT LOG: aborting any active transactions
2017-08-16 03:44:34 GMT FATAL: terminating connection due to administrator command
2017-08-16 03:44:34 GMT FATAL: terminating connection due to administrator command
2017-08-16 03:44:34 GMT LOG: autovacuum launcher shutting down
2017-08-16 03:44:34 GMT LOG: shutting down
2017-08-16 03:44:34 GMT LOG: database system is shut down
2017-08-16 03:46:04 GMT LOG: incomplete startup packet
2017-08-16 03:46:04 GMT LOG: database system was shut down at 2017-08-16 03:44:34 GMT
2017-08-16 03:46:04 GMT LOG: MultiXact member wraparound protections are now enabled
2017-08-16 03:46:04 GMT LOG: database system is ready to accept connections
2017-08-16 03:46:04 GMT LOG: autovacuum launcher started
可能是什么原因?
配置细节:
OS: Ubuntu 16.04.1 LTS (Windows Azure VM)
PostgreSQL version: 9.5.8
listen address: * (my bad, but Azure have to block another ports from external access.
I didn't enable PG 5432 port for external access)
HBA config:
local all postgres ident
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host all all 10.0.0.0/24 md5
host replication app_replicator 10.0.0.5/32 md5
local all all peer
有人手动或通过 Windows 服务控制器 ( , , ...)执行了
pg_ctl -m fast stop
then 。pg_ctl start
services.msc
net service
如果不是你,那是一个预定的工作,来自一些非官方的 3rd 方的一些与 PostgreSQL 相关的工具的自动更新,等等。因为除非你的系统被历史上最神秘的幸运宇宙射线击中,否则就会发生这种情况。
无法从 PostgreSQL SQL 环境中重新启动 PostgreSQL(通过 PgAdmin 的 SQL 连接
psql
等)。您可以通过从不受信任的过程语言发送信号来完成此操作,plpythonu
或者plperlu
如果您以数据库超级用户身份连接并且安装了这些语言。但除此之外,它会在命令外壳级别使用pg_ctl
,通过向 postmaster 进程发出信号等来完成。就我而言,这是由于系统内存不足而自动发生的。
在 Syslog 中找到有关 oom_reaper 和 dotnet oom 任务的日志,但不是来自 Postgres。我只在 Postgres csvlog 中收到消息“收到快速关闭请求”。
PS:由于我的 Postgres 在 Docker 内部运行,我不能相互排除 Docker 发送信号并强制关闭(但我不假设这一点)
当这发生在我身上时,它是对 PostgreSQL 的自动更新。我通过查看 /var/log/dpkg.log 文件验证了这一点,并看到 PostgreSQL 在关闭时已更新。