Сервер PostgreSQL не запускается после изменения wal_level=minimal на wal_level=replica

«Пост-Грэс-Кью-Эл» свободная объектно-реляционная СУБД. Обмениваемся вопросами и ответами о её работе.
Ответить
AntonS
Сообщения: 116
Зарегистрирован: Пт июн 03, 2022 8:51 am

Сервер PostgreSQL не запускается после изменения wal_level=minimal на wal_level=replica

Сообщение AntonS »

Сервер PostgreSQL был запущен с параметром wal_level=minimal для повышения скорости загрузки данных. Затем необходимо было вернуть wal_level=replica и запустить сервер в кластере.

После изменения параметров сервер PostgreSQL не стартует:

Код: Выделить всё

-bash-4.4$ pg_ctl -D $PGDATA start
waiting for server to start....2024-12-30 17:37:21.584 MSK [4226] LOG:  redirecting log output to logging collector process
2024-12-30 17:37:21.584 MSK [4226] HINT:  Future log output will appear in directory "log".
 stopped waiting
pg_ctl: could not start server
Examine the log output.
Хотя серверный лог содержит неинформативную подсказку касательно wal_level=minimal, можно заметить попытку запуска в режиме реплики (standby mode) :

Код: Выделить всё

2024-12-30 17:34:00.322 MSK [4215] LOG:  entering standby mode
2024-12-30 17:34:00.322 MSK [4215] LOG:  database system was not properly shut down; automatic recovery in progress
2024-12-30 17:34:00.327 MSK [4215] FATAL:  WAL was generated with wal_level=minimal, cannot continue recovering
2024-12-30 17:34:00.327 MSK [4215] DETAIL:  This happens if you temporarily set wal_level=minimal on the server.
2024-12-30 17:34:00.327 MSK [4215] HINT:  Use a backup taken after setting wal_level to higher than minimal.
2024-12-30 17:34:00.329 MSK [4211] LOG:  startup process (PID 4215) exited with exit code 1
2024-12-30 17:34:00.329 MSK [4211] LOG:  aborting startup due to startup process failure
2024-12-30 17:34:00.346 MSK [4211] LOG:  database system is shut down
Причина в том, что в кластере база данных сначала всегда запускается как реплика, и затем как мастер.
Чтобы запустить мастер c wal_level=replica, надо подключиться пользователем postgres и удалить пустой файл standby.signal в каталоге PGDATA, после чего сервер стартует:

Код: Выделить всё

-bash-4.4$ pg_ctl -D $PGDATA start
waiting for server to start....2024-12-30 17:37:21.584 MSK [4226] LOG:  redirecting log output to logging collector process
2024-12-30 17:37:21.584 MSK [4226] HINT:  Future log output will appear in directory "log".
 done
server started
Пользуясь тем, что админ форума уже активно готовится к Праздникам ;)
Всех участников русскоязычного сообщества PostgreSQL с наступающим Новым 2025 годом! 🎄
Ответить