Opciones de Destino de Recuperación
Los destinos de recuperación le indican a PostgreSQL cuándo detener la repetición de WAL durante la Recuperación a un Momento Dado (PITR). Elija una hora, un ID de transacción (XID), LSN o un punto de restauración con nombre creado antes de un trabajo arriesgado.
Receta
Recuperar un segundo antes de un
DROPaccidental usando una marca de tiempo.
# postgresql.auto.conf en la instancia de restauración
restore_command = 'cp /wal_archive/%f %p'
recovery_target_time = '2026-07-09 14:31:58+00'
recovery_target_action = 'promote'-- Antes de la migración arriesgada en el primario
SELECT pg_create_restore_point('before_migration_20260709');Cuándo usar esto: Recuperación de precisión cuando sabe aproximadamente cuándo ocurrió el error o etiquetó el momento con anticipación.
Ejemplo de Trabajo
Compare los tipos de destino y los límites inclusivos/exclusivos:
-- Punto de restauración con nombre (primario, antes del cambio)
SELECT pg_create_restore_point('pre_deploy_v42');# Opción A: destino con nombre
recovery_target_name = 'pre_deploy_v42'
recovery_target_action = 'promote'
# Opción B: marca de tiempo (inclusiva por defecto en PG 18)
recovery_target_time = '2026-07-09 14:31:58+00'
recovery_target_inclusive = on
# Opción C: ID de transacción (avanzado)
# recovery_target_xid = '1234567'-- Después de que se complete la recuperación
SELECT pg_is_in_recovery(); -- false después de promote
-- Verificar que el cambio incorrecto no está presente
SELECT to_regclass('public.dropped_table');Lo que esto demuestra:
pg_create_restore_pointregistra una etiqueta en WAL para momentos exactos conocidos por el equipo.recovery_target_timenecesita una cadena literal consciente de la zona horaria.recovery_target_action = 'promote'abre la base de datos para conexiones después de alcanzar el destino.
Inmersión Profunda
Parámetros de Destino
| Parámetro | Se detiene en |
|---|---|
recovery_target_time | Marca de tiempo (use cadena timestamptz) |
recovery_target_xid | ID de transacción |
recovery_target_lsn | Número de secuencia de registro |
recovery_target_name | Etiqueta de pg_create_restore_point |
recovery_target | Alias; establece una cadena de destino genérica |
recovery_target_inclusive | Incluir (on) o excluir (off) el registro coincidente |
recovery_target_action
| Valor | Comportamiento |
|---|---|
pause | Pausa la recuperación en el destino; espera a pg_wal_replay_resume() |
promote | Finaliza la recuperación y acepta conexiones |
shutdown | Detiene la instancia en el destino (inspeccionar antes de promover) |
Encontrar el Momento Adecuado
-- En el primario (si aún está activo): registro de auditoría o marcas de tiempo de la aplicación
SELECT now();
-- pg_audit o registros de la aplicación reducen el segundo del DROPUse recovery_target_action = 'pause' primero si no está seguro; inspeccione los datos, luego promueva.
Trampas
- Hora local sin desplazamiento - Los errores de horario de verano mueven el punto de recuperación. Solución: Siempre use
+00o una zona explícita. - Destino después del último WAL archivado - La recuperación se detiene al final del WAL disponible, no en el destino. Solución: Asegúrese de que la cadena de archivo esté completa hasta el momento deseado.
- Inclusivo con una transacción de diferencia - La fila incorrecta todavía es visible. Solución: Pruebe la restauración desde cero; ajuste
recovery_target_inclusive. - Sin punto de restauración antes del despliegue - Solo recuperación aproximada por tiempo. Solución:
pg_create_restore_pointobligatorio en la lista de verificación de cambios. - Promover antes de la validación - Producción abierta con datos incorrectos. Solución:
pause+ verificar primero en la instancia de recuperación.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
recovery_target_lsn | Tiene el LSN exacto de las herramientas pg_walfile_name | Los operadores humanos eligen la hora |
pgBackRest --target | Herramienta de copia de seguridad unificada | Solo directorios de archivo manuales |
| Flashback de tabla (deshacer lógico) | Tabla pequeña, volcado reciente | Error en todo el clúster |
Preguntas Frecuentes
¿Destino con nombre vs. por tiempo?
El nombre es exacto al marcador del equipo; el tiempo requiere correlación de registros pero no necesita una llamada a la API de previsión.
¿Puedo recuperar hasta el último?
Omita el destino de recuperación; la recuperación repite todo el WAL disponible y luego promueve con recovery.signal eliminado o el disparador promote.
¿recovery_target_xid cuándo?
Cuando los registros muestran el txid exacto de la instantánea pg_current_xact_id() antes del error.
¿Múltiples destinos establecidos?
PostgreSQL usa uno; la configuración conflictiva genera un error o prioriza según la documentación. Establezca solo un tipo de destino.
¿Patroni PITR?
Patroni puede iniciar un nuevo clúster a partir de una copia de seguridad con parámetros de recuperación; no en el lugar en un líder en ejecución.
Relacionado
- Conceptos Básicos de PITR - flujo general
- archive_mode & archive_command - suministro de WAL
- Manual de Práctica de PITR - práctica de destinos
- Conceptos Básicos de Gestión de Cambios - puntos de restauración en cambios
Versiones de la pila: Esta página fue escrita para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.