У меня есть настройка потоковой репликации PostgreSQL 9.1.3 на Ubuntu 10.04.2 LTS (основная и резервная). Репликация инициализируется потоковой базовой резервной копией (pg_basebackup
). Скрипт restore_command
пытается получить требуются архивы WAL из удаленного архива с rsync
.
Все работает, как описано в документации, когда сценарий restore_command не работает с код выхода ‹> 255:
При запуске резервный запускается с восстановления всего WAL, доступного в расположении архива, вызывая restore_command. Когда он достигает конца доступного там WAL и команда restore_command завершается неудачно, он пытается восстановить любой WAL, доступный в каталоге pg_xlog. Если это не удается и потоковая репликация настроена, резервный пытается подключиться к первичному серверу и начать потоковую передачу WAL с последней действительной записи, найденной в архиве или pg_xlog. Если это не удается или потоковая репликация не настроена, или если соединение позже разрывается, резервный возвращается к шагу 1 и снова пытается восстановить файл из архива. Этот цикл повторных попыток из архива pg_xlog и потоковой репликации продолжается до тех пор, пока сервер не будет остановлен или пока не будет запущено переключение при отказе файлом триггера.
Но когда сценарий restore_command завершается с ошибкой с кодом выхода 255 (потому что код выхода из неудачного вызова rsync возвращается сценарием), серверный процесс умирает со следующей ошибкой:
2012-05-09 23:21:30 CEST - @ LOG: database system was interrupted; last known up at 2012-05-09 23:21:25 CEST
2012-05-09 23:21:30 CEST - @ LOG: entering standby mode
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(601) [Receiver=3.0.7]
2012-05-09 23:21:30 CEST - @ FATAL: could not restore file "00000001000000000000003D" from archive: return code 65280
2012-05-09 23:21:30 CEST - @ LOG: startup process (PID 8184) exited with exit code 1
2012-05-09 23:21:30 CEST - @ LOG: aborting startup due to startup process failure
Итак, мой вопрос теперь: это ошибка или есть особое значение кода выхода 255, которое отсутствует в отличной документации, или мне здесь не хватает чего-то еще?