pg_archivecleanup

pg_archivecleanup — limpia los archivos del archivo WAL (WAL archive) de PostgreSQL

Synopsis

pg_archivecleanup [option...] archivelocation oldestkeptwalfile

Descripción

pg_archivecleanup está diseñado para utilizarse como un archive_cleanup_command para limpiar archivos del archivo WAL cuando se ejecuta como un servidor en espera (standby, véase Section 26.2). pg_archivecleanup también se puede usar como un programa independiente para limpiar los archivos del archivo WAL.

Para configurar un servidor en espera para que use pg_archivecleanup, coloca esto en su archivo de configuración postgresql.conf:

archive_cleanup_command = 'pg_archivecleanup archivelocation %r'

donde archivelocation es el directorio del cual se deben eliminar los archivos de segmento WAL.

Cuando se utiliza dentro de archive_cleanup_command, todos los archivos WAL que precedan lógicamente al valor del argumento %r se eliminarán de archivelocation. Esto minimiza el número de archivos que deben conservarse, al tiempo que preserva la capacidad de reinicio tras una caída (crash-restart). El uso de este parámetro es apropiado si archivelocation es una zona de paso transitoria para este servidor en espera en particular, pero no cuando archivelocation está pensada como un área de archivo WAL a largo plazo, o cuando múltiples servidores en espera se están recuperando desde la misma ubicación de archivo.

Cuando se utiliza como programa independiente, todos los archivos WAL que precedan lógicamente a oldestkeptwalfile se eliminarán de archivelocation. En este modo, si especificas un nombre de archivo .partial o .backup, entonces solo el prefijo del archivo se utilizará como oldestkeptwalfile. Este tratamiento de los archivos .backup te permite eliminar todos los archivos WAL archivados antes de una copia de seguridad base específica sin errores. Por ejemplo, el siguiente ejemplo eliminará todos los archivos más antiguos que el archivo WAL con nombre 000000010000003700000010:

pg_archivecleanup -d archive 000000010000003700000010.00000020.backup

pg_archivecleanup:  keep WAL file "archive/000000010000003700000010" and later
pg_archivecleanup:  removing file "archive/00000001000000370000000F"
pg_archivecleanup:  removing file "archive/00000001000000370000000E"

pg_archivecleanup asume que archivelocation es un directorio con permisos de lectura y escritura para el usuario propietario del servidor.

Opciones

pg_archivecleanup acepta los siguientes argumentos de línea de comandos:

-b
--clean-backup-history

Elimina también los archivos de historial de copia de seguridad. Véase Section 25.3.2 para más detalles sobre los archivos de historial de copia de seguridad.

-d
--debug

Muestra una gran cantidad de registros de depuración en stderr.

-n
--dry-run

Muestra los nombres de los archivos que se habrían eliminado en la salida estándar stdout (realiza una prueba de ejecución o dry run).

-V
--version

Muestra la versión de pg_archivecleanup y termina.

-x extension
--strip-extension=extension

Proporciona una extensión que se eliminará de todos los nombres de archivo antes de decidir si se deben borrar. Esto suele ser útil para limpiar archivos que se han comprimido durante el almacenamiento y a los que, por lo tanto, el programa de compresión les ha añadido una extensión. Por ejemplo: -x .gz.

-?
--help

Muestra la ayuda sobre los argumentos de línea de comandos de pg_archivecleanup y termina.

Entorno

La variable de entorno PG_COLOR especifica si se debe usar color en los mensajes de diagnóstico. Los valores posibles son always, auto y never.

Notas

pg_archivecleanup está diseñado para funcionar con PostgreSQL 8.0 y versiones posteriores cuando se utiliza como una utilidad independiente, o con PostgreSQL 9.0 y posteriores cuando se utiliza como comando de limpieza de archivo.

pg_archivecleanup está escrito en C y tiene un código fuente fácil de modificar, con secciones específicamente designadas para adaptarse a tus propias necesidades.

Ejemplos

En sistemas Linux o Unix, puedes usar:

archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>cleanup.log'

donde el directorio de archivo está ubicado físicamente en el servidor en espera, de modo que el archive_command accede a él a través de NFS, pero los archivos son locales para el standby. Esto logrará:

  • producir salida de depuración en cleanup.log

  • eliminar los archivos que ya no se necesitan del directorio de archivo