Вопрос: Не стартует служба PostgreSQL
Windows Server 2012
PostgreSQL Database Server 9.4.2-1.1C(x64)
На сервере с середины апреля крутились 2 базы 1С
Файл postgresql.conf был отредактирован по рекомендациям с сайта 1с сообразно характеристикам сервера.
Со слов админа, вчера штатно выключили, потом включили.
Служба не стартует, в логах вот что:
2016-05-06 10:05:40 GMT LOG: database system was interrupted; last known up at 2016-05-06 09:59:33 GMT
2016-05-06 10:05:40 GMT LOG: database system was not properly shut down; automatic recovery in progress
2016-05-06 10:05:40 GMT LOG: record with zero length at 6/C7F6AAA8
2016-05-06 10:05:40 GMT LOG: redo is not required
2016-05-06 10:05:40 GMT FATAL: could not access status of transaction 1262199
2016-05-06 10:05:40 GMT DETAIL: Could not open file "pg_clog/0001": No such file or directory.
2016-05-06 10:05:40 GMT LOG: startup process (PID 24696) exited with exit code 1
2016-05-06 10:05:40 GMT
Служба работает под пользователем USR1CV8, права у него на папку Data полные
Архивы есть недельной давности.
Ответ:
тогда базы у вас нет.
--
Maxim Boguk
Вопрос: postgresql - после переноса каталога data служба не запускается
Доброе время суток. Имеется вышеуказанная СУБД, каталог данных установлен по пути: /var/lib/pgsql/9.3/data
Нужно перенести каталог данных в расположение /postgre_dbs/data . Мои действия:
1. Останавливаю PostGreSQL
2. Копирую папку data со всеми подпапками, и записями прав на папки и файлы (cp -p -R) в /postgre_dbs
3. В файле /var/lib/pgsql/9.3/data пишу строку:
data_directory = "/postgre_dbs/data/"
4. Пробую запустить службу postgresql - получаю FAILED
5. смотрю pgstartup.log - там строки:
< 2015-10-20 21:14:17.361 ALMT >ВАЖНО: файл блокировки "postmaster.pid" уже существует
< 2015-10-20 21:14:17.361 ALMT >ПОДСКАЗКА: Другой экземпляр postmaster (PID 1633) работает с каталогом данных "/postgre_dbs/data"?
В чем причина проблемы, как ее решить?
Ответ: guestfreeman,
Вы идете четко по плану опытных товарищей:
Как запускается служба PostgreSQL?
Знает ли она, что БД находится в другом каталоге?
Вопрос: Не стартует служба postgree
2016-04-27 13:28:46 IRKT LOG: database system was interrupted; last known up at 2016-04-27 13:16:51 IRKT
2016-04-27 13:28:46 IRKT LOG: invalid primary checkpoint record
2016-04-27 13:28:46 IRKT LOG: invalid secondary checkpoint link in control file
2016-04-27 13:28:46 IRKT PANIC: could not locate a valid checkpoint record
2016-04-27 13:28:46 IRKT LOG: startup process (PID 8912) exited with exit code 3
2016-04-27 13:28:46 IRKT LOG: aborting startup due to startup process failure
Из поисков в интернете попробовал выполнить pg_controldata
PostgreSQL\9.4.2-1.1C\bin>pg_controldata e:\pql
pg_control version number: 942
Catalog version number: 201409291
Database system identifier: 6254454928233336196
Database cluster state: in production
pg_control last modified: 27.04.2016 9:04:41
Latest checkpoint location: DC/223641B8
Prior checkpoint location: DC/1F301DA8
Latest checkpoint"s REDO location: DC/213D1950
Latest checkpoint"s REDO WAL file: 00000001000000DC00000021
Latest checkpoint"s TimeLineID: 1
Latest checkpoint"s PrevTimeLineID: 1
Latest checkpoint"s full_page_writes: on
Latest checkpoint"s NextXID: 0/2148384
Latest checkpoint"s NextOID: 4123902
Latest checkpoint"s NextMultiXactId: 1
Latest checkpoint"s NextMultiOffset: 0
Latest checkpoint"s oldestXID: 668
Latest checkpoint"s oldestXID"s DB: 1
Latest checkpoint"s oldestActiveXID: 0
Latest checkpoint"s oldestMultiXid: 1
Latest checkpoint"s oldestMulti"s DB: 16402
Time of latest checkpoint: 27.04.2016 9:04:31
Fake LSN counter for unlogged rels: 0/1
Minimum recovery ending location: 0/0
Min recovery ending loc"s timeline: 0
Backup start location: 0/0
Backup end location: 0/0
End-of-backup record required: no
Current wal_level setting: minimal
Current wal_log_hints setting: off
Current max_connections setting: 200
Current max_worker_processes setting: 8
Current max_prepared_xacts setting: 0
Current max_locks_per_xact setting: 64
Maximum data alignment: 8
Database block size: 8192
Blocks per segment of large relation: 131072
WAL block size: 8192
Bytes per WAL segment: 16777216
Maximum length of identifiers: 64
Maximum columns in an index: 32
Maximum size of a TOAST chunk: 1996
Size of a large-object chunk: 2048
Date/time type storage: 64-bit integers
Float4 argument passing: by value
Float8 argument passing: by reference
Data page checksum version: 0
PostgreSQL\9.4.2-1.1C\bin>pg_resetxlog -o 4123902 -x 2148384 -f e:\pql
pg_resetxlog: could not create pg_control file: File exists
Как устранить проблему с pg_resetxlog: could not create pg_control file: File exists?
Ответ:
Попробуйте добавить ключ
-P disable system indexes
(но скорее всего у вас не только этот индекс слетел).
Если у вас нет ни реплики ни backup - я бы сказал что шансов восстановить базу у вас около 0.
Восстановить так чтобы 1C заработал - еще меньше.
PS: а как вы такого добились и какое значение fsync было в конфиге?
--
Maxim Boguk
Вопрос: portable postgresql doesn"t listen
Выполняю запуск портативного postgre.
Каталог - копия работающего postgresql 9.3
ОС - Windows 7
На компьютере был установлен сервер postgresql 9.3, но в момент запуска poratble postgresql процесс был остановлен, процессы postgress в диспетчере задач windows завершены
Для запуска в каталог postgresql добавлен командный файл:
ECHO ON
for
%%i in
(*.bat) do SET
CD=%%~dpi
REM
Устанавливаем переменные окружения для запуска PostgreSQL
SET
PATH="%CD%bin"
;%PATH%
SET
PGDATA=%CD%data
SET
PGDATABASE=postgres
SET
PGUSER=postgres
SET
PGPORT=5439
SET
PGLOCALEDIR=%CD%share
\locale
REM
%CD%bin\initdb -U postgres -A trust
%CD%bin\pg_ctl -D %CD%data
-l logfile start
ECHO
pause
%CD%\bin\pg_ctl -D %CD%data
stop
Сервер стартует. Выдаются сообщения:
...
F:\Temp\9.3
\bin\pg_ctl -D F:\Temp\9.3
\data
-l logfile start
Сервер запускается
ECHO "Press Enter to Stop PostgreSQL Server"
pause
Пытаюсь подключиться к серверу из pgAdmin III
Свойства подключения:
Имя: TempPostgre
Хост: localhost
Служба: пустая строка
Обслуживание DB: postgres
Имя пользователя:postgres
Пароль:X (Тот, который был для базы-прототипа)
Получаю сообщение:
Server doesn"t listen
The server doesn"t accept conections: connections library reports
При подключении к серверу пробовал в адресе хоста: 10.10.10.121 (ip компьютера в локальной сети). Результат тот же.
Ответ:
Проблема была в файле postgresql.conf, который находится в каталоге данных
После установки в этом файле
port = 5439 # (change requires restart)
все заработало.
Всем спасибо
Вопрос: ошибка 1053 при запуске postgresql
заранее извиняюсь, если тема создана не в том разделе.
win10 x64
postgresql 8.4
автоматически служба не запускается. если принудительно - вылазит ошибка 1053:
антивирус нод32. брандмауэр отключил (хотя служба была в исключениях):
сейчас она в исключениях брандмауэра виндовс:
postgresql использую для работы holdemmanager2. поэтому из-за не запуска postgresql не запускается и holdemmanager2.
помогите пожалуйста. перелопатил уже полсети - ничего не помогает.
Ответ:
при этом в службах постгри не в статусе "running"
Вопрос: Репликация данных PostgreSQL - Windows Server 2008
Есть сервер БД, с которым работают клиенты, и резервный сервер, на который надо настроить репликацию с основной базы данных.
В моём случае используется PostgreSQL 9.2.1, который установлен на обоих серверах
сделал по этой инструкции не работает
при настройке конфигурационных файлов (как указано в статье) и при добавлении файла recovery.conf база перестает стартовать.
Нужна ваша помощь.
Ответ: askat123,
если база не стартует - в логах обязательно будет написано почему. нужно начинать с них, прежде чем гадать.
Вопрос: Postgresql 9.5 не запускается автоматически после сбоя питания
Добрый день!
Помогите, пожалуйста, разобраться со следующей проблемой:
На десктопе под Debian 8.2 установлена тестовая БД PostgreSQL (9.5.3). Настройки БД в postgresql.conf - минимальные - listen_adress, port и т.п. Остально по умолчанию. Файл прилагаю.
Достаточно часто отключают электроэнергию, упса нет.
После появления питания СУБД сама не запускается - лог привожу ниже
автор |
---|
2016-08-04 19:13:30 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:30 MSK СООБЩЕНИЕ: работа системы БД была прервана; последний момент работы: 2016-08-04 16:15:49 MSK 2016-08-04 19:13:30 MSK [н/д]@[н/д] СООБЩЕНИЕ: неполный стартовый пакет 2016-08-04 19:13:31 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:31 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:32 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:32 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:33 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:33 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:34 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:34 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:35 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:35 MSK postgres@postgres ВАЖНО: система баз данных запускается 2016-08-04 19:13:45 MSK СООБЩЕНИЕ: система БД была остановлена нештатно; производится автоматическое восстановление 2016-08-04 19:13:45 MSK СООБЩЕНИЕ: неверная длина записи по смещению 1/9F46638 2016-08-04 19:13:45 MSK СООБЩЕНИЕ: данные REDO не требуются 2016-08-04 19:13:46 MSK СООБЩЕНИЕ: Защита от наложения мультитранзакций сейчас включена 2016-08-04 19:13:46 MSK СООБЩЕНИЕ: выключение 2016-08-04 19:13:46 MSK СООБЩЕНИЕ: система БД выключена |
После этого либо запуском вручную либо после перезагрузки компа система стартует нормально.
Как можно обеспечить, чтобы после внештатного выключения в случае успешного восстановления система запускалась автоматически?
К сообщению приложен файл (postgresql.conf - 21Kb)
Ответ: asdasd1,
я подозреваю что настройки systemd виноваты. после какого-то таймаута он выключает базу штатно:
2016-08-04 19:13:35 MSK СООБЩЕНИЕ: получен запрос на "вежливое" выключение
посмотрите, какие настройки в /usr/lib/systemd/system/postgresql-9.5.service файле.
Вопрос: Не стартует PostgreSQL
Добрый день
Выпал Postgresql и больше не запускается, в логах
автор |
---|
LOG: could not link file "pg_xlog/xlogtemp.79221" to "pg_xlog/00000001000000000000004F" (initialization of log file 0, segment 79): Operation not permitted LOG: startup process (PID 79221) exited with exit code 1 LOG: aborting startup due to startup process failure LOG: loaded library "online_analyze" LOG: loaded library "plantuner" LOG: database system was shut down at 2015-04-09 09:11:44 EEST LOG: could not link file "pg_xlog/xlogtemp.79344" to "pg_xlog/00000001000000000000004F" (initialization of log file 0, segment 79): Operation not permitted FATAL: could not open file "pg_xlog/00000001000000000000004F" (log file 0, segment 79): No such file or directory LOG: startup process (PID 79344) exited with exit code 1 LOG: aborting startup due to startup process failure |
Зашел в эту папку и действительно нету файла 00000001000000000000004F.
Не могу понять почему так получилось. Работало, а потом хлоп и все, не работает.
Как решить эту проблему, как запустить Постгрес?
Ответ: Dark Smoke,
Наиболее подозрительно смотрится:
автор |
---|
"LOG: could not link file "pg_xlog/xlogtemp.79344" to "pg_xlog/00000001000000000000004F" (initialization of log file 0, segment 79): Operation not permitted" |
Обычно это следы вмешательства дурного антивируса в работу базы (или с правами у вас что то не так стало но само посебе нетак с правами не становится).
Директория базы должна быть исключена из списка мест куда антивирус может заходить.
Вопрос: Автозапуск PostgreSQL 9.6 в Debian 8
Приветствую вас!
Столкнулся с проблемой старта PostgreSQL 9.6 при загрузке ОС Debian 8.
Автозапуск пытаюсь сделать собственным скриптом написанным в соответствии с официальной документацией по СУБД (пп. 18.3 Запуск сервера БД, стр. 565)
Содержимое файла \etc\init.d\postgresql:
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: postgresql
# Required-Start: $local_fs $remote_fs $network $time
# Required-Stop: $local_fs $remote_fs $network $time
# Should-Start: $syslog
# Should-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PostgreSQL RDBMS server
### END INIT INFO
PG_PATH="/usr/lib/postgresql/9.6/bin"
PGDATA=
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DESC="postgresql daemon"
NAME=postgresql
DAEMON=/usr/lib/postgresql/9.6
/bin/postgresql
PIDFILE="$PGDATA/postmaster.pid"
SCRIPTNAME=/etc/init.d/"$NAME"
case "$1"
in
start)
su - postgres -c "$PG_PATH/pg_ctl start -D $PGDATA -l $PGDATA/log_file.txt"
exit 0
;;
stop|status)
su - postgres -c "$PG_PATH/pg_ctl $1"
;;
kill)
su - postgres -c "$PG_PATH/pg_ctl stop -m fast"
;;
reboot)
$0
kill
$0
start
;;
*)
echo "Используйте: $0 {start|stop|kill|reboot|status}"
exit 1
;;
esac
exit 0
При запуске из консоли скрипт работает корректно
root@debian:~# /etc/init.d/postgresql start
сервер запускается
root@debian:~# /etc/init.d/postgresql status
pg_ctl: сервер работает (PID: 759
)
/usr/lib/postgresql/9.6
/bin/postgres "-D"
"/var/lib/postgresql/9.6/main"
root@debian:~# /etc/init.d/postgresql stop
ожидание завершения работы сервера.... готово
сервер остановлен
root@debian:~#
На скрипт есть ссылки в:
/etc/rc0.d -> K02postgresql
/etc/rc1.d -> K02postgresql
/etc/rc2.d -> S02postgresql
/etc/rc3.d -> S02postgresql
/etc/rc4.d -> S02postgresql
/etc/rc5.d -> S02postgresql
/etc/rc6.d -> K02postgresql
Пытался разобраться со стандартным скриптом автозапуска PostgeSQL, но не осилил.
Тем более, что в мануале по postgresql рекомендуется делать именно так.
Уже отчаялся искать ответ в Инете. Прошу конкретного совета.
Ответ:
Спасибо Ёш!
Повезло, наткнулся на хорошую статью на Хабрахабре
По ней:
1. В /etc/systemd/system/multi-user.target.wants нашел ссылку на unit postgresql.service
2. Переписал его следующим образом
Description=PostgreSQL RDBMS
Type=forking
PIDFile=/var/lib/postgresql/9.6
/main/postmaster.pid
WorkingDirectory=/usr/lib/postgresql/9.6
/bin
User=postgres
Group=postgres
Environment=PGDATA=/var/lib/postgresql/9.6
/main
OOMScoreAdjust=-100
ExecStart=/usr/lib/postgresql/9.6
/bin/pg_ctl start -D /var/lib/postgresql/9.6/main -l /var/lib/postgresql/9.6/main/log_file.txt
ExecStop=/usr/lib/postgresql/9.6
/bin/pg_ctl stop -m fast
ExecReload=/usr/lib/postgresql/9.6
/bin/pg_ctl restart -D /var/lib/postgresql/9.6/main
TimeoutSec=60
#Restart=always
#ExecStart=/bin/true
#ExecReload=/bin/true
#RemainAfterExit=on
WantedBy=multi-user.target
К стати, здесь используется решение, которое позволяет препятствовать агрессивной работе OOM killer о которой пишется в мануале по postgres. О нем говорится что его невозможно остановить, но оказывается что это возможно, указав OOMScoreAdjust=-1000
OOM killer - механизм уничтожения процессов при нехватке памяти, который был реализован на уровне ядра, начиная с Linux 2.6 и новее.
Ещё возможно раскомментировать строчку #Restart=always.
В таком случае будет отслеживаться наличие указанного PIDFile и при его отсутствии производиться попытка запуска postgresql
Можно считать это аналогом скрипта из моего предшествующего поста, но с реализацией на уровне системы))
После изменения unit-файла postgresql.service поочередно выполнил команды для переустановки и проверки его работы
systemctl disable postgresql.service
systemctl enable postgresql.service
systemctl -l status postgresql.service
systemctl start postgresql.service
systemctl stop postgresql.service
При выключении системы сервер корректно останавливается и при старте ОС Debian 8 автоматом загружается.
Убрал костыль, который делал для Cron"а
Если есть недостатки в предложенном решении с радостью выслушаю.
Вопрос: При установке Postgresql 9.4 в Debian 8 (jessie) не создаётся директория /etc/postgresql
Добрый день!
Был установлен Postgresql 9.4. ОС Debian 8 (jessie)
В очередной момент горе администратор решил переустановить его.
При этом при удалении пакетов Postgresql и Pgadmin3 удалял что-то вручную.
В результате на сегодняшний день админа нет, а при моих всяческих попытках установить Postgresql не создается директория /etc/postgresql и соответственно конфигурационные файлы которые в ней хранятся...
Подскажите пожалуйста как можно теперь корректно установить Postgresql-сервер.
Использование стандартных методов sudo apt-get --purge remove postgresql и последующая установка sudo apt-get install postgresql не помогает...
Заранее спасибо за ответы!
Ответ:
Устанавливал так.
После удаления postgresql-common с параметром --purge и повторной установки все конфиги были восстановлены.
Прописал пользователей, поправил настройки и все заработало!
Спасибо огромное!!!
Я пытаюсь запустить Postgres 9.2.4 в качестве службы в Windows 7. После установки postgres служба работает нормально. Однако после установки postgres в качестве сервера для другой программы служба перестала работать. Когда я пытаюсь запустить сервис сейчас, я получаю сообщение о том, что:
"Служба postgresql-x64-9.2 - PostgreSQL Server 9.2 на локальном компьютере Компьютер начал, а затем остановился. Некоторые службы автоматически останавливаются, если они не используются другими службами или программами".
Когда я пытаюсь запустить программу, которая должна использовать сервер базы данных, я получаю эту ошибку:
"Проблема возникла при попытке войти в систему или создать производственной базы данных. Подробности: не удалось подключиться к серверу; Мог не подключаться к удаленному разъему. Приложение должно теперь закрыть"
Я также столкнулся с этой ошибкой один раз при открытии одной и той же программы:
"Проблема возникла при попытке войти в систему или создать производственной базы данных. Подробности: FATAL: не удалось загрузить pg_hba.conf. приложение должно теперь закрыть."
Я попытался запустить службу, зарегистрированную как локальную системную учетную запись, а также мою собственную учетную запись (в свойствах свойств postgres) безрезультатно. Я также попытался перезагрузить компьютер. После многих проблем в Интернете, я узнал, что хорошо проверить файл pg_log. Вот содержание последней записи pg_log:
2013-05-29 14:59:45 MDT LOG: database system was interrupted; last known up at 2013-05-29 14:58:01 MDT 2013-05-29 14:59:45 MDT LOG: database system was not properly shut down; automatic recovery in progress 2013-05-29 14:59:45 MDT LOG: record with zero length at 0/175BB98 2013-05-29 14:59:45 MDT LOG: redo is not required 2013-05-29 14:59:45 MDT LOG: database system is ready to accept connections 2013-05-29 14:59:45 MDT LOG: autovacuum launcher started 2013-05-29 15:07:00 MDT LOG: local connections are not supported by this build 2013-05-29 15:07:00 MDT CONTEXT: line 1 of configuration file "C:/PostgreSQL/data/pg_hba.conf" 2013-05-29 15:07:00 MDT FATAL: could not load pg_hba.conf 2013-05-29 15:07:00 MDT LOG: local connections are not supported by this build 2013-05-29 15:07:00 MDT CONTEXT: line 1 of configuration file "C:/PostgreSQL/data/pg_hba.conf" 2013-05-29 15:07:00 MDT FATAL: could not load pg_hba.conf 2013-05-29 15:09:03 MDT LOG: received fast shutdown request 2013-05-29 15:09:03 MDT LOG: aborting any active transactions 2013-05-29 15:09:03 MDT LOG: autovacuum launcher shutting down 2013-05-29 15:09:03 MDT LOG: shutting down 2013-05-29 15:09:03 MDT LOG: database system is shut down
Кажется, что возникают проблемы с файлом pg_hba.conf, который выглядит следующим образом:
Local all all trust host all all 127.0.0.1 255.255.255.255 trust host all all 0.0.0.0 0.0.0.0 trust
В соответствии с многочисленными предложениями в Интернете я попытался изменить верхнюю строку на несколько различных альтернатив (все хосты all trust/host all 127.0.0.1/32 trust/host all 192.168.0.100/24 trust и т.д.). Это имело смысл для меня, поскольку в файле журнала говорилось, что локальные соединения не поддерживаются postgres и также указывают на эту строку. Однако ни одно из моих изменений не повлияло. Я попытался перезагрузить свой компьютер после каждого изменения, но ничего не изменилось.
Когда я искал примеры того, как обычно выглядит файл pg_hba.conf, примеры выглядели немного отличными от моего файла. Я заметил, что в файле программы PostgreSQL в дополнение к pg_hba.conf был также файл 20130529-150444-old-pg_hba.conf, который намного больше напоминал примеры, которые я нашел в Интернете. Этот файл имеет несколько строк комментариев до этих последних нескольких строк:
# TYPE DATABASE USER ADDRESS METHOD # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. #host replication postgres 127.0.0.1/32 md5 #host replication postgres::1/128 md5
Я надеялся, что это был оригинальный файл pg_hba.conf, и если я заменил новый файл содержимым старого, postgres начнут работать снова. Нет такой удачи. Я надеялся, что в файле pg_log будет зарегистрировано больше файлов ошибок, чтобы узнать, исчезла ли ранее заявленная ошибка или что-то изменилось, но больше файлов не было зарегистрировано.
Я искал онлайн-службу в течение нескольких дней, и ничего, что я нашел, не сработало. Извините за такой длинный вопрос, но я хотел быть основательным и включить всю соответствующую информацию. Я был бы признателен, если бы кто-нибудь мог пролить свет на эту проблему или предложить предложения.
pg_ctl init [ -s ] [ -D datadir ] [ -o initdb-options ]
pg_ctl start [ -w ] [ -t секунды ] [ -s ] [ -D datadir ] [ -l имя_файла ] [ -o параметры ] [ -p path ] [ -c ]
pg_ctl stop [ -W ] [ -t секунды ] [ -s ] [ -D datadir ] [ -m s | f | i ]
pg_ctl restart [ -w ] [ -t секунды ] [ -s ] [ -D datadir ] [ -c ] [ -m s | f | i ] [ -o параметры ]
pg_ctl reload [ -s ] [ -D datadir ]
pg_ctl status [ -D datadir ]
pg_ctl promote [ -s ] [ -D datadir ]
pg_ctl kill signal_name process_id
pg_ctl register [ -N servicename ] [ -U имя_пользователя ] [ -P пароль ] [ -D datadir ] [ -S a | d ] [ -w ] [ -t секунды ] [ -s ] [ -o параметры ]
pg_ctl unregister [ -N servicename ]
Сервер запускается в режиме start . Процесс работает в фоновом режиме, а стандартный ввод связывается с /dev/null (или nul под управлением Windows). По умолчанию в Unix-подобных системах вывод и ошибки сервера пишутся в устройство стандартного вывода (не ошибок) pg_ctl . Вывод pg_ctl следует перенаправить в файл или процесс, например, приложение ротации журналов rotatelogs ; в ином случае, postgres будет писать вывод в управляющий терминал (в фоновом режиме) и останется в группе процессов оболочки. В Windows вывод и ошибки сервера по умолчанию перенаправляются в терминал. Это поведение можно изменить и направить вывод сервера в файл, добавив ключ -l . Мы рекомендуем использовать ключ -l или перенаправлять вывод.
Чтобы остановить сервер, используется stop . Остановить можно в трёх режимах, задаваемых флагом -m . По умолчанию используется режим "Smart" , который ожидает завершения всех активных клиентских соединений и удалённых процессов резервирования. Если сервер работает в режиме горячего резервирования, то восстановление и потоковая репликация будут остановлены, как только все клиентские сессии завершаться. Режим "Fast" не ожидает закрытия клиентских сессий и прерывает удалённые процессы резервирования. Все активные транзакции откатываются, а клиенты принудительно отсоединяются, после чего сервер останавливается. Режим "Immediate" незамедлительно прерывает все процессы и останавливает сервер, что приводит на следующем старте к необходимости восстановления после сбоя.
Для остановки с последующим стартом сервера используется restart . При этом доступны флаги команды postgres . restart может не отработать, если при старте сервера в командной строке был указан относительный путь к каталогу хранения данных.
Чтобы перечитать конфигурацию (postgresql.conf , pg_hba.conf и т. д.), используется reload , при этом процесс postgres получает системный сигнал SIGHUP . Это позволяет применить изменения без полного рестарта сервера.
Чтобы проверить статус кластера, используется status . Если кластер запущен, то будет выведен PID процесса, а также команда с использованными при запуске аргументами. Если кластер остановлен, то процесс вернёт статус завершения 3. Если не указан каталог хранения данных, то процесс вернёт статус завершения 4.
Чтобы перевести резервный сервер в режим основного, используется promote . При этом сервер прекращает работу в режиме восстановления и начинает работать в режиме чтения-записи.
Чтобы послать сигнал процессу, используется kill . Это особенно применимо в среде Microsoft Windows , которая не имеет в оснастке команды kill . Чтобы посмотреть список доступных сигналов, обратитесь к справке --help .
Для регистрации в качестве системной службы под управлением Microsoft Windows , используется register . Флаг -S устанавливает режим запуска службы, либо "auto" (на старте ОС), либо "demand" (по запросу).
Чтобы удалить зарегистрированную службу в Microsoft Windows , используется unregister .
Параметры
C
--core-file
На платформах, где это поддерживается, сервер будет пытаться фиксировать снимки памяти при авариях. Это позволяет диагностировать и предотвращать потенциальные проблемы в будущем. -D datadir
--pgdata datadir
Указывает размещение конфигурационных файлов кластера. Если не указано, используется значение переменной окружения PGDATA . -l имя_файла
--log имя_файла
Выводит данные журнала в filename
. Файл создаётся, если он ещё не существует. При этом umask
выставляется в 077, что предотвращает доступ других пользователей к этому файлу. -m режим
--mode режим
Устанавливает режим остановки кластера. mode принимает значения smart , fast , или immediate , либо по первой букве каждого из доступных значений, например, s . Если флаг опущен, то используется smart . -o параметры
Указывает флаги, которые будут переданы в postgres .
Значение необходимо обрамлять одинарными или двойными кавычками, чтобы гарантировать целостность группы. -o initdb-options
Указывает флаги, которые будут переданы в initdb .
Значение необходимо обрамлять одинарными или двойными кавычками, чтобы гарантировать целостность группы. -p path
Указывает размещение приложения postgres . По умолчанию используется тот же путь, по которому находится pg_ctl , либо, если это не удалось, то берётся путь инсталляции. Применять этот параметр чаще всего необходимости нет, кроме нестандартных ситуаций.
init принимает параметры аналогично initdb . -s
--silent
Выводить лишь ошибки, без сообщений информационного характера. -t
--timeout
Максимальное время (в секундах) ожидания запуска или остановки сервера. По умолчанию это 60 секунд. -V
--version
Выводит версию pg_ctl и прерывает выполнение. -w
Ожидает завершения запуска или остановки. Это является режимом по умолчанию для операций остановки, но не запуска. На этапе запуска pg_ctl непрерывно пытается подключиться к серверу. На этапе остановки pg_ctl проверяет наличие PID файла. Этот параметр позволяет установить ввод контрольного слова для SSL на старте сервера. pg_ctl возвращает код завершения, основываясь на результате операций запуска или остановки. -W
Игнорировать ожидание завершения запуска или остановки сервера. Это поведение используется по умолчанию для режимов запуска и повторного запуска. -?
--help
Вывести справку по команде pg_ctl и прервать выполнение.
Параметры, специфичные для Windows
N servicename
Имя регистрируемой системной службы. Оно используется в качестве системного и отображаемого значения. -P пароль
Пароль пользователя, стартующего службу. -S тип запуска
Тип запуска системной службы. Может принимать значения: auto , или demand , либо быть представлен первой буквой названия каждого приведённого значения. По умолчанию используется auto . -U имя_пользователя
Имя пользователя, от имени которого будут запущена служба. Для доменных пользователей необходимо использовать нотацию DOMAIN\username .
Это сообщение предназначено прежде всего для меня лично и для нашей службы поддержки, т.к. проблема подобная описанной ниже происходит с завидной периодичностью и нужно помнить основные шаги по ее решению.
Итак, история начинается с того, что мне 30 декабря в 11-30 звонят с сообщением о том, что у одного из наших клиентов не запускается наша система, поскольку не может подключиться к базе данных (в качестве СУБД у нас используется PostgreSql версии 8.1). Люди объясняют это тем, что час назад вырубило свет и компьютер вырубился некорректно, а после включения – все перестало работать:)
Хорошие пользователи нашей системы знают, где находится кнопка пуск и знают, что в системе не двое часиков “одни с цифрами, а другие песочные”. Поэтому единственное, что удалось сделать по телефону, так это попытаться руками запустить службу СУБД, результат – служба таки не запускается. Пришлось пробрасывать на тот компьютер интернет (на компьютерах, где установлена наша система интернета быть не должно) для возможности удаленного подключения.
После подключения к удаленному компьютеру я попытался запустить службу и получил следующее сообщение: “Служба PostgreSql Database Server 8.1” на “Локальный компьютер” была запущена и затем остановлена. Некоторые службы автоматически останавливаются, если им нечего делать, например, служба журналов и оповещений производительности”. Мда…
Проблема в том, что на тот момент это была единственная доступная информация… Логи PostgreSql пусты, записей в них никаких, в системных логах – тоже пустота.
Отладка служб – процесс не простой, поэтому многие разработчики предусматривают механизмы запуска приложения-службы, как обыкновенного консольного приложения с помощью ключей командной строки. И PostgreSql в этом плане – не исключение; для запуска нужно использовать следующую команду (Hint: эту команду можно запустить только из под неадминистративного пользователя системы, правда, если вы об этом забудете, то PostgreSql очень быстро вам об этом напомнит):
postgres -D "
Запускаем, и смотрим на сообщение об ошибке. В моем случае это сообщение звучало примерно так:
FATAL - bogus data in lock file "postmaster.pid"
Безусловно, мне повезло, проблема оказалась поправимой. Почему-то указанный файл оказался пустым, и мне понадобилось скопировать его содержимое из рабочего экземпляра СУБД, что не составило особого труда.
Мораль этого сообщения в том, что если база легла, или произошли какие-то другие проблемы с системой, то прежде чем переустанавливать СУБД (или систему целиком) и терять при этом все данные, нужно хотя бы попытаться выяснить в чем проблема, возможно, есть все шансы, что вам удастся восстановить работоспособность не такими радикальными способами.
З.Ы. Всех с наступающим Новым Годом и пожелания того, чтобы ваши системы были стабильными и надежными и не портили ваш сон, но даже если какие-то проблемы и возникали, то у вас всегда были наготове варианты, как с этой ситуацией справиться.