我正在使用 PostgreSQL 9.0。它在关机期间挂起。当我使用pg_ctl stop
它时它挂起,一段时间后它显示消息:
pg_ctl: server does not shut down
当我使用 psql 时,它显示:
psql: FATAL: the database system is shutting down
并在日志中写入这些消息
DEBUG: postmaster received signal 15
2011-07-14 09:36:00 ETC/GMT LOG: received smart shutdown request
请告诉我如何解决?
答案1
默认情况下,pg_ctl
将尝试“智能关机”。此关机将告诉系统不要接受任何新连接,但直到现有连接断开后才会关机。
您可能想要使用“快速”关机(通过执行pg_ctl -m fast
),这也会断开现有用户的连接。
对于 Debian(pg_ctl
默认情况下不启用$PATH
):
pg_ctlcluster 9.4 main restart -m fast
答案2
常规关闭请求将等到所有连接终止。
当pg_ctl stop
“挂起”时,这意味着您仍然打开与数据库的连接。关闭连接到该服务器的所有应用程序,然后 Postgres 应该可以正常关闭。
错误“数据库系统正在关闭”是因为 Postgres 正在尝试关闭并且因此不允许任何新的连接。
答案3
当尝试确定发生了什么时,您可以通过以下方式登录psql
并输入:
test=> SELECT * FROM pg_stat_activity;
datid | datname | procpid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | xact_start | query_start | waiting | current_query
-------+---------+---------+----------+--------------+------------------+-------------+-----------------+-------------+-------------------------------+-------------------------------+-------------------------------+---------+---------------------------------
18703 | test | 7604 | 18702 | test_sean | psql | | | -1 | 2011-07-14 07:23:40.021921+00 | | 2011-07-14 07:23:46.398894+00 | f | <IDLE>
18703 | test | 7673 | 18702 | test_sean | psql | | | -1 | 2011-07-14 07:24:54.507982+00 | 2011-07-14 07:25:00.102369+00 | 2011-07-14 07:25:00.102369+00 | f | SELECT * FROM pg_stat_activity;
(2 rows)
答案4
除非您确实要使用 pg_ctl,否则为什么不使用以下命令:
sudo /etc/init.d/postgresql-9.1 stop
init.d 脚本问题:
$SU -l postgres -c "$PGENGINE/pg_ctl stop -D '$PGDATA' -s -m fast" > /dev/null 2>&1 < /dev/null
这是一次快速关机并执行您需要的操作。