Restauración PITR PostgreSQL

9

Tengo un servidor PostgreSQL 9.1 que se ejecuta en un sistema operativo CentOS 5.8 de 32 bits y he habilitado el archivo WAL. En este servidor, hay tres bases de datos: databaseA, databaseB y databaseC. Alguien elimina una tabla a las 12 pm en la base de datos B y quiero restaurar la base de datos B justo antes de la hora en que se eliminó la tabla. Ahora son las 3 pm.

¿Cómo puedo restaurar la base de datos B hasta las 12 p. M. Sin perder tres horas de datos en las otras dos bases de datos?

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'

Ejecuté mi copia de seguridad base a las 9 a.m.

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

El servicio PostgreSQL se cerró a las 3 pm.

Craig Efrein
fuente

Respuestas:

6

Haría un punto en el tiempo de recuperación en una ubicación diferente, restaurando el tiempo deseado, y pg_dump la base de datos del problema. Soltaría la única base de datos en la ubicación normal, la volvería a crear y cargaría la salida pg_dump.

Asegúrese de hacer y guardar una copia a nivel del sistema de archivos del árbol de directorio de datos del clúster antes de comenzar algo como esto.

kgrittn
fuente
Gracias, +1 por la respuesta. ¿Podría agregar los pasos necesarios para recuperarse en una ubicación diferente y luego restaurar utilizando pg_restore? Con su respuesta, estoy pensando en usar la ubicación de respaldo base real para hacer el PITR.
Craig Efrein
0

Para ampliar la respuesta de kgrittn, también puede hacer una pg_dumpde solo la tabla que se descartó y reconstruirla en la base de datos B existente, por lo que no necesita perder 6 horas de datos en las otras tablas.

Aryeh Leib Taurog
fuente
gracias por su respuesta, pero todas las diversas restricciones y relaciones entre las tablas me impedirían restaurar solo una.
Craig Efrein