Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

PG_PITR_RESTORE_FAIL 1С:Предприятие и СУБД

Восстановление PostgreSQL на момент времени (PITR): pg_waldump и recovery.signal

Обновлено: 26.08.2026 · Официальная документация ↗
  • Случайное выполнение деструктивного запроса (DROP TABLE или ошибочный UPDATE без WHERE) в продакшн-базе.
  • Необходимость откатить состояние СУБД на секунду до момента совершения логической ошибки.
  • Ошибки согласованности при запуске инстанса в режиме восстановления архивов.

1. Поиск точного LSN или временной метки ошибки через pg_waldump

# Поиск деструктивной транзакции DROP TABLE в архивах WAL
pg_waldump /var/lib/postgresql/wal_archive/00000001000000A1000000B2 | grep -E "DROP|COMMIT"

2. Остановка текущего экземпляра и разворачивание базового бэкапа

systemctl stop postgresql

# Очистка текущего каталога данных (или перенос в backup_old)
rm -rf /var/lib/postgresql/16/main/*

# Разворачивание физического базового бэкапа (basebackup)
tar -xvf /mnt/backups/base_backup_2024_01_01.tar -C /var/lib/postgresql/16/main/

3. Конфигурация параметров восстановления в postgresql.conf

Создайте маркерный файл recovery.signal в каталоге данных:

touch /var/lib/postgresql/16/main/recovery.signal
chown postgres:postgres /var/lib/postgresql/16/main/recovery.signal

В конец файла /var/lib/postgresql/16/main/postgresql.conf добавьте параметры таргетинга:

# Команда для извлечения недостающих WAL-файлов из архива
restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'

# Целевая точка восстановления по времени (UTC или локальное время)
recovery_target_time = '2024-03-30 14:25:30'

# Действие по достижении точки: pause (для проверки) или promote
recovery_target_action = 'pause'
recovery_target_inclusive = false

4. Запуск инстанса, проверка данных и финализация

systemctl start postgresql

-- Проверка состояния: находится ли сервер в режиме восстановления
SELECT pg_is_in_recovery();

-- Если данные корректны, завершить восстановление и открыть базу на запись
SELECT pg_wal_replay_resume();
💡 Практика специалистов: Всегда указывайте recovery_target_inclusive = false при откате последствий DROP TABLE, иначе сама транзакция удаления таблицы попадет в число накатанных операций и таблица все равно будет уничтожена.

Частые вопросы (FAQ)

Что произойдет с recovery.signal после успешного завершения PITR?

После завершения наката и перехода базы в обычный режим работы PostgreSQL автоматически удаляет файл recovery.signal или переименовывает его.

В чем разница между recovery_target_time и recovery_target_xid?

recovery_target_time указывает точную временную метку (timestamp), а recovery_target_xid — номер конкретной транзакции (Transaction ID), перед которой необходимо остановить накат.

Что делает параметр recovery_target_action = 'pause'?

Он приостанавливает накат WAL в заданной точке, переводя базу в режим Read-Only, чтобы администратор мог подключиться через psql, проверить данные и выполнить pg_wal_replay_resume().

Почему при PITR изменяется идентификатор Timeline (новая ветка таймлайна)?

При выходе из восстановления база открывает новую ветку истории (Timeline ID увеличивается на 1), чтобы новые транзакции не перезаписали оригинальную историю старых WAL.

Полезные материалы
Рекомендуем