PostgreSQL PITR восстановление

9

У меня есть сервер PostgreSQL 9.1, работающий на 32-битной ОС CentOS 5.8, и я включил архивирование WAL. На этом сервере есть три базы данных: база данных A, база данных B и база данных C. Кто-то удаляет таблицу в 12 часов вечера в базе данных B, и я хочу восстановить базу данных B как раз до того времени, когда таблица была удалена. Время сейчас 3 часа дня.

Как я могу просто восстановить базу данныхB до 12 часов вечера, не теряя данных за три часа в двух других базах данных?

postgresql.conf

wal_level = archive             
archive_mode = on               
archive_command = 'test ! -f /opt/pgsql/logs/%f && cp %p /opt/pgsql/logs/%f'
max_wal_senders = 100

recovery.conf

restore_command = 'cp /opt/pgsql/logs/%f %p'
recovery_target_time = '2012-06-29 11:59:59 CEST'

Я запустил свою резервную копию в 9 часов утра

pg_basebackup -h 127.0.0.1 -D /opt/pgsql/backup

Служба PostgreSQL была закрыта в 3 часа дня.

Крейг Эфрейн
источник

Ответы:

6

Я бы сделал момент восстановления в другое место, восстановив желаемое время, и pg_dump проблемной базы данных. Я бы оставил одну базу данных в обычном месте, создал бы ее снова и загрузил вывод pg_dump.

Убедитесь, что вы создали и сохранили копию на уровне файловой системы дерева каталогов данных кластера, прежде чем начинать что-либо подобное.

kgrittn
источник
Спасибо, +1 за ответ. Не могли бы вы добавить шаги, необходимые для восстановления в другое место, а затем восстановить с помощью pg_restore? С вашим ответом я подумываю использовать фактическое базовое место резервирования для выполнения PITR.
Крейг Эфрейн
0

Чтобы расширить ответ kgrittn, вы также можете выполнить pg_dumpтолько таблицу, которая была отброшена, и перестроить ее в существующей базе данныхB , поэтому вам не нужно терять 6 часов данных в других таблицах.

Арье Лейб Таурог
источник
спасибо за ваш ответ, но все различные ограничения и отношения между таблицами помешали бы мне восстановить только одну.
Крейг Эфрейн