Интернет. Безопасность. Программы. Полезные советы

Не запускается postgresql 8.4 windows 10. PostgreSQL Запуск и завершение PostgreSQL. Параметры, специфичные для Windows

Вопрос: Не стартует служба 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"

Безусловно, мне повезло, проблема оказалась поправимой. Почему-то указанный файл оказался пустым, и мне понадобилось скопировать его содержимое из рабочего экземпляра СУБД, что не составило особого труда.

Мораль этого сообщения в том, что если база легла, или произошли какие-то другие проблемы с системой, то прежде чем переустанавливать СУБД (или систему целиком) и терять при этом все данные, нужно хотя бы попытаться выяснить в чем проблема, возможно, есть все шансы, что вам удастся восстановить работоспособность не такими радикальными способами.

З.Ы. Всех с наступающим Новым Годом и пожелания того, чтобы ваши системы были стабильными и надежными и не портили ваш сон, но даже если какие-то проблемы и возникали, то у вас всегда были наготове варианты, как с этой ситуацией справиться.