Существует несколько способов остановки сервера баз данных.
Фактически все они сводятся к отправке сигнала основному процессу (supervisor)
postgres process.
В случае использования пакетной версии Digital Q.DataBase, и для запуска сервера использовались его механизмы, то для остановки сервера также следует использовать эти механизмы. Для получения подробных сведений обратитесь к документации на соответствующий пакет.
При прямом управлении сервером типом остановки можно управлять путем отправки различных сигналов процессу postgres
process:
Это режим «умного» завершения работы (Smart Shutdown). После получения сигнала SIGTERM, сервер запрещает новые подключения, но позволяет существующим сеансам завершить свою работу в обычном режиме. Завершение работы сервера происходит только после закрытия всех сеансов. Если сервер находится в режиме восстановления в момент запроса на «умное» завершение работы, процессы восстановления и потоковой репликации будут остановлены только после завершения всех обычных сеансов.
Это Fast Shutdown (Smart Shutdown). Сервер запрещает новые подключения и отправляет всем существующим процессам сервера сигнал SIGTERM, который заставляет их прервать текущие транзакции и немедленно завершить работу. Затем сервер ожидает завершения всех процессов сервера и окончательно завершает работу.
Это — Режим немедленного завершения режим. Сервер отправит сигнал SIGQUIT всем дочерним процессам и будет ожидать их завершения. Если какие-либо процессы не завершатся в течение 5 секунд, им будет отправлен сигнал SIGKILL. Основной управляющий процесс сервера завершает работу сразу после выхода всех дочерних процессов без выполнения стандартных процедур выключения базы данных. Это приведет к необходимости восстановления (путем воспроизведения журналов WAL) при следующем запуске. Данный режим рекомендуется использовать только в экстренных случаях.
Программа pg_ctl программа предоставляет удобный
интерфейс для отправки этих сигналов с целью остановки сервера.
Кроме того, сигнал можно отправить напрямую, используя команду kill
в системах, отличных от Windows. PID процесса postgres можно
найти при помощи программы ps или из файла
postmaster.pid в каталоге данных. Например,
для выполнения быстрого выключения:
$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`
Не рекомендуется использовать SIGKILL для завершения работы
сервера. Это помешает серверу освободить разделяемую память и семафоры. Кроме того, SIGKILL завершает работу postgres процесс, не позволяя ему передать сигнал своим подпроцессам, поэтому может потребоваться завершить отдельные подпроцессы вручную.
Для завершения отдельного сеанса при сохранении работы других сеансов используйте функцию pg_terminate_backend() (см. Таблица 2.6.94) или отправьте сигнал
SIGTERM дочернему процессу, связанному с
сеансом.