我使用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
请告诉我如何解决它?
默认情况下, pg_ctl将尝试“智能closures”。 这种关机将告诉系统不接受任何新的连接,但在现有连接断开之前不会closures。
您可能想使用“快速”closures(通过pg_ctl -m fast执行pg_ctl -m fast ),这也将断开现有的用户。
对于Debian( pg_ctl在$PATH不是默认的):
pg_ctlcluster 9.4 main restart -m fast
一个正常的closures请求将等到所有的连接都被终止。
当pg_ctl stop “挂起”时,这意味着你仍然有开放的连接到数据库。 closures连接到该服务器的所有应用程序,然后Postgres应该正常closures。
“数据库系统正在closures”的错误来自Postgres试图closures的事实,因此它不允许任何新的连接。
当试图确定发生了什么,你可以通过psqllogin并input:
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)
除非你绝对要使用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
这是一个快速关机并执行你所需要的。