Я использую 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
попытается «умное выключение». Это выключение сообщит системе, что она не принимает никаких новых подключений, но не отключится до тех пор, пока существующие не отключатся.
Вероятно, вы захотите использовать «быстрое» выключение (выполнив pg_ctl -m fast
), что также отключит существующих пользователей.
Для Debian (pg_ctl
не по умолчанию включен $PATH
):
pg_ctlcluster 9.4 main restart -m fast
Обычный запрос на отключение будет ждать, пока все соединения не будут разорваны.
когда pg_ctl stop
"зависает", это означает, что у вас все еще есть открытые подключения к базе данных. Закройте все приложения, которые подключаются к этому серверу, после чего Postgres должен нормально завершиться.
Ошибка «система базы данных выключается» возникает из-за того, что Postgres пытается завершить работу и в результате не разрешает новые соединения.
При попытке определить, что происходит, вы можете войти в систему через 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)
Если вы абсолютно не хотите использовать 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
Это быстрое завершение работы и выполнение того, что вам нужно.