![]() |
![]() |
![]() |
Запуск и завершение PostgreSQL В этом разделе описаны два способа запуска и завершения серверного процесса PostgreSQL. Первый способ основан на применении управляющей программы pg_ctl, которая должна одинаково работать на всех компьютерах независимо от операционной системы. Предполагается, что сценарий должен выполняться системным пользователем (то есть пользователем, которому принадлежит каталог данных), которому разрешено выполнение серверного процесса postmaster. Во втором варианте применяется сценарий SysV, находящийся в подкаталоге contrib/start-scripts основного каталога PostgreSQL. Установка сценария SysV описана в главе 2. По умолчанию сценарий называется linux, поскольку он предназначен для запуска из стартового сценария Linux, хотя в инструкциях по установке он переименовывается в сценарий postgresql в каталоге запуска служб (например, /etc/rc.d/init.d). Самое принципиальное различие между программой pg_ctl и сценарием SysV заключается в том, что программа pg_ctl выполняется пользователем, запускающим серверный процесс postmaster (например, postgres), а сценарий SysV должен запускаться пользователем root. Сценарий службы не является специфическим для Linux. Он совместим с большинством систем, использующих стартовые сценарии SysV. Тем не менее, если вы не работаете в системе Linux, возможно, лучше выбрать pg_ctl. Приложение pg_ctl В поставку PostgreSQL входит приложение pg_ctl, предназначенное для решения общих задач управления. В частности, оно позволяет запускать, завершать, перезапускать и получать информацию о состоянии PostgreSQL. При запуске pg_ctl с ключом - -help выводится следующее описание: pg_ctl start [-w] [-D каталог] [-s] [-1 файл] [-о "параметры"] pg_ctl stop [-W] [-0 каталог] [-s] [-m режим_завершения] pg_ctl restart [-w] [-D каталог] [-s] [-m режим_завершения] [-о "параметры"] pg_ctl status [-D каталог] Ключи приложения pg_ctl описаны ниже.
ПРИМЕЧАНИЕ Многие параметры конфигурации postmaster задаются в файле postgresql.conf, находящемся в каталоге данных PostgreSQL (например, /usr/local/pgsql/data). Эти параметры управляют более сложными техническими аспектами работы PostgreSQL. He изменяйте их, если не уверены в правильности своих действий. Запуск PostgreSQL в приложении pg_ctl Чтобы запустить серверный процесс PostgreSQL postmaster, передайте pg_ctl ключ start. Помните, что приложение pg_ctl должно запускаться пользователем postgres (или другим пользователем, которому принадлежит каталог данных PostgreSQL). В листинге 9.1 приведен пример запуска postmaster с каталогом данных /usr/ local/pgsql/data. СУБД успешно запускается, выдает время последнего завершения работы базы данных и отладочную информацию, после чего пользователь postgres возвращается к приглашению командного интерпретатора. Листинг 9.1. Запуск PostgreSQL в приложении pg_ctl [postgres@booktown -]$ pg_ctl -D /usr/1oca!/pgsql/data start postmaster successfully started DEBUG: database system was shut down at 2001-09-17 08:06:34 POT DEBUG: Checkpoint record at (0. 1000524052) DEBUG: Redo record at (0. 1000524052): Undo record at (0. 0): Shutdown TRUE DEBUG: NextTransactionld: 815832: NextOid: 3628113 DEBUG: database system is in production state [postgres@booktown -]$ Завершение PostgreSQL в приложении pg_ctl Серверный процесс PostgreSQL postmaster можно остановить той же программой pg_ctl, которой он был запущен. Приложение pg_ctl проверяет Наличие работающего процесса postmaster, и если команда stop была выдана владельцем работающего процесса (например, пользователем postgres), сервер PostgreSQL прекращает работу. Существуют три режима завершения серверного процесса PostgreSQL: интеллектуальный (smart), ускоренный (fast) и немедленный (immediate). Режим завершения задается ключом -т при вызове pg_ctl. В интеллектуальном режиме (используемом по умолчанию) PostgreSQL перед завершением ждет, пока все клиенты отключатся от сервера. В ускоренном режиме PostgreSQL просто начинает стандартную процедуру завершения, не проверяя состояние клиентских подключений. В немедленном режиме стандартная процедура завершения пропускается, и при последующем перезапуске система должна пройти через режим восстановления. ВНИМАНИЕ Никогда не завершайте процесс postmaster командой kill -9 (kill -KILL), что приводит к потере или порче данных. В листинге 9.2 сценарий pg_ctl завершает процесс postmaster в ускоренном режиме. Процесс postmaster прекращает работу, не дожидаясь отключения клиентов. Листинг 9.2. Завершение PostgreSQL в приложении pg_ctl [postgres@booktown -]$ pg_ctl -D /usr/local/pgsql/data stop -m fast Fast Shutdown request at Mon Sep 17 09:23:39 2001 DEBUG: shutting down waiting for postmaster to shut down..... DEBUG: database system is shut down done postmaster successfully shut down [postgres@booktown -]$ ПРИМЕЧАНИЕ Завершение в режиме smart эквивалентно команде kil I -TERM для процесса postmaster. Режим fast эквивалентен команде kill -INT, а аналогом режима immediate является команда kill -QUIT. Перезапуск PostgreSQL в приложении pg_ctl Последовательные вызовы pg_ctl с операциями stop и start можно заметить одним вызовом с операцией restart. В команде также может присутствовать флаг -т, определяющий режим завершения. Параметры, использованные при последнем запуске PostgreSQL, хранятся во временном файле postmaster.opts в каталоге данных PostgreSQL (переменная PGDATA). Файл используется при вызове pg_ctl с аргументом restart и обеспечивает сохранение предыдущих настроек при перезапуске. Не размещайте собственные параметры конфигурации в файле postmaster.opts, поскольку они будут стерты при запуске pg_ctl с аргументом start. В листинге 9.3 приведен пример перезапуска сервера базы данных booktown пользователем postgres. Листинг 9.3. Перезапуск PostgreSQL в приложении pg_ctl [postgres@booktown ~]$ pg_ctl -D /usr/1oca!/pgsql/data restart Smart Shutdown request at Mon Sep 17 08:33:51 2001 DEBUG: shutting down waiting for postmaster to shut down.....DEBUG: database system is shut down done postmaster successfully shut down postmaster successfully started [postgres@booktown -]$ DEBUG: database system was shut down at 2001-09-17 08:33:53 PDT DEBUG: Checkpoint record at (0. 1000524116) DEBUG: Redo record at (0. 1000524116): Undo record at (0. 0): Shutdown TRUE DEBUG: NextTransactionld: 815832: NextOid: 3628113 DEBUG: database system is in production state [postgres@booktown ~J$ Проверка состояния PostgreSQL в приложении pg_ctl При вызове с аргументом status приложение pg_ctl возвращает информацию о состоянии процесса postmaster. Хотя выполнение команды никак не отражается на состоянии данных, приложению pg_ctl должен быть известен каталог данных PostgreSQL. Если переменная среды PGDATA не существует, при вызове необходимо передать ключ -D. Пример получения информации о состоянии сервера PostgreSQL приведен в листинге 9.4. Листинг 9.4. Проверка состояния PostgreSQL в приложении pg_ctl [postgres@booktown -]$ pg_ctl -D /usr/local/pgsql/data status pg_ctl: postmaster is running (pid: 11575) Command line was: /usr/local/pgsql/bin/postmaster '-D' '/usr/local/pgsql/data' [postgres@booktown -]$ ПРИМЕЧАНИЕ Использование переменной PGDATA заметно сокращает объем команды. Если вы всегда работаете с одним каталогом данных, присвойте значение переменной PGDATA (например, в файле /etc/profile, как рекомендовалось в главе 2), и вам не придется использовать ключ -D. |
![]() |
![]() |
![]() |