pg_archivecleanup — limpia los archivos del archivo WAL (WAL archive) de PostgreSQL
pg_archivecleanup [option...] archivelocation oldestkeptwalfile
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.
pg_archivecleanup acepta los siguientes argumentos de línea de comandos:
-b--clean-backup-historyElimina 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--versionMuestra 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.
-?--helpMuestra la ayuda sobre los argumentos de línea de comandos de pg_archivecleanup y termina.
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.
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.
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