PostgreSQL 在 Linux 中关闭时挂起?

PostgreSQL 在 Linux 中关闭时挂起?

我正在使用 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

这是一次快速关机并执行您需要的操作。

相关内容