Un backup que nunca se probó es solo una esperanza. En PostgreSQL, esto importa especialmente: una base de datos puede seguir recibiendo escrituras mientras haces una copia, y no todos los métodos sirven igual para producción.
Para bases pequeñas, pg_dump puede ser suficiente. Pero cuando necesitas backups físicos, incrementales, retención y restauración más controlada, pgBackRest es una herramienta muy usada en entornos PostgreSQL.
En esta guía vas a configurar pgBackRest en un Cloud Server Ubuntu para hacer backups de PostgreSQL y validar que puedes restaurarlos.
¿Qué es pgBackRest?
pgBackRest es una herramienta open source para backup y restore de PostgreSQL. Permite crear backups completos, diferenciales e incrementales, trabajar con retención, comprimir archivos y preparar escenarios de recuperación.
A diferencia de un dump SQL, pgBackRest trabaja a nivel físico sobre el clúster PostgreSQL. Esto lo vuelve más adecuado para bases medianas o grandes, o para entornos donde necesitas mejorar tiempos de backup y restore.
¿Cuándo conviene usarlo?
Conviene usar pgBackRest cuando:
- tu base de datos ya no es cómoda de respaldar solo con
pg_dump; - necesitas backups incrementales;
- quieres automatizar retención;
- necesitas probar restores de forma periódica;
- administras PostgreSQL en un Cloud Server propio;
- quieres una base más sólida para recuperación ante errores humanos, fallos o corrupción.
No elimina la necesidad de snapshots, copias externas o políticas de recuperación. Lo ideal es combinar varias capas: backup de PostgreSQL, snapshot del servidor y copia fuera del servidor.

Requisitos previos
Vas a necesitar:
- Cloud Server con Ubuntu;
- PostgreSQL instalado y funcionando;
- usuario con permisos
sudo; - acceso al usuario del sistema
postgres; - espacio suficiente para almacenar backups;
- idealmente, un volumen adicional o almacenamiento externo para el repositorio;
- puerto PostgreSQL
5432/tcpsolo si hay conexiones remotas autorizadas.
Recomendación: no guardes tu única copia de seguridad en el mismo disco donde vive la base de datos. Para empezar sirve como práctica, pero en producción deberías usar otro volumen, otro servidor o almacenamiento externo.
Paso 1: Identificar tu versión y clúster PostgreSQL
Primero revisa qué clúster tienes instalado:
pg_lsclustersVerás una salida similar a:
Ver Cluster Port Status Owner Data directory16 main 5432 online postgres /var/lib/postgresql/16/mainAnota:
- versión de PostgreSQL;
- nombre del clúster;
- ruta del directorio de datos.
En los ejemplos usaremos:
Versión: 16Clúster: mainData directory: /var/lib/postgresql/16/mainAjusta estos valores a tu servidor real.
Paso 2: Instalar pgBackRest
Instala pgBackRest desde los paquetes disponibles:

sudo apt updatesudo apt install -y pgbackrestPaso 1
Verifica la instalación:
pgbackrest versionPaso 2
Crea el directorio del repositorio local:
sudo mkdir -p /var/lib/pgbackrestsudo chown postgres:postgres /var/lib/pgbackrestsudo chmod 750 /var/lib/pgbackrestPaso 3
Paso 3: Configurar pgBackRest
Edita el archivo principal:
sudo nano /etc/pgbackrest.confAgrega una configuración base. Ajusta pg1-path según la salida de pg_lsclusters:
[global]repo1-path=/var/lib/pgbackrestrepo1-retention-full=2repo1-retention-diff=6start-fast=yprocess-max=2log-level-console=infolog-level-file=detail[main]pg1-path=/var/lib/postgresql/16/mainQué hace esta configuración:
repo1-path: ubicación del repositorio de backups.repo1-retention-full=2: conserva dos backups completos.repo1-retention-diff=6: conserva backups diferenciales según política.start-fast=y: solicita checkpoint rápido para iniciar el backup.process-max=2: usa dos procesos paralelos.[main]: define el nombre del stanza.
Asegura permisos:
sudo chown postgres:postgres /etc/pgbackrest.confsudo chmod 640 /etc/pgbackrest.confPaso 4: Configurar PostgreSQL para archivado WAL
pgBackRest necesita trabajar correctamente con WAL si quieres una estrategia más robusta de recuperación.

Edita la configuración de PostgreSQL. La ruta puede variar según versión:
sudo nano /etc/postgresql/16/main/postgresql.confAsegúrate de tener estos valores:
archive_mode = onarchive_command = 'pgbackrest --stanza=main archive-push %p'wal_level = replicamax_wal_senders = 3Reinicia PostgreSQL:
sudo systemctl restart postgresqlComprueba el estado:
sudo systemctl status postgresql --no-pagerPaso 5: Crear el stanza
El stanza es la definición lógica que pgBackRest usa para asociar una configuración con un clúster PostgreSQL.
Ejecuta:

sudo -u postgres pgbackrest --stanza=main stanza-createValida la configuración:
sudo -u postgres pgbackrest --stanza=main checkSi el check falla, revisa:
- ruta
pg1-path; - permisos del repositorio;
- estado de PostgreSQL;
- configuración de
archive_command; - logs en
/var/log/pgbackrest.
Paso 6: Ejecutar un backup completo
Haz el primer backup completo:

sudo -u postgres pgbackrest --stanza=main --type=full backupConsulta el estado:
sudo -u postgres pgbackrest --stanza=main infoDeberías ver el backup full registrado.
Paso 7: Ejecutar un backup incremental
Después del primer full, puedes ejecutar un incremental:

sudo -u postgres pgbackrest --stanza=main --type=incr backup
Los incrementales dependen de backups anteriores y permiten reducir tiempo y espacio respecto de copiar todo el clúster cada vez.
Paso 8: Automatizar backups con systemd
Puedes usar cron, pero systemd timers ofrecen buena integración con logs y servicios del sistema.

Crea el servicio:
sudo nano /etc/systemd/system/pgbackrest-main-backup.serviceContenido:
Crea el timer:
sudo nano /etc/systemd/system/pgbackrest-main-backup.timer[Unit]Description=pgBackRest backup for PostgreSQL main stanza[Service]Type=oneshotUser=postgresExecStart=/usr/bin/pgbackrest --stanza=main --type=incr backupContenido:
[Unit]Description=Run pgBackRest incremental backup daily[Timer]OnCalendar=*-*-* 02:30:00Persistent=true[Install]WantedBy=timers.targetActiva el timer:
sudo systemctl daemon-reloadsudo systemctl enable --now pgbackrest-main-backup.timersudo systemctl list-timers --all | grep pgbackrestPara ver logs:
journalctl -u pgbackrest-main-backup.service --no-pagerPaso 9: Probar restauración

No esperes a una emergencia para probar el restore. La prueba más segura es hacerlo en otro servidor o en un entorno temporal.
En un servidor de prueba con PostgreSQL detenido:
sudo systemctl stop postgresqlHaz una copia del directorio de datos antes de tocarlo:
sudo mv /var/lib/postgresql/16/main /var/lib/postgresql/16/main.baksudo mkdir -p /var/lib/postgresql/16/mainsudo chown postgres:postgres /var/lib/postgresql/16/mainsudo chmod 700 /var/lib/postgresql/16/mainRestaura:
sudo -u postgres pgbackrest --stanza=main restoreInicia PostgreSQL:
sudo systemctl start postgresqlsudo systemctl status postgresql --no-pagerValida bases y tablas:
sudo -u postgres psql -c "\l"Advertencia: no ejecutes una restauración destructiva sobre producción salvo que tengas un plan claro, ventana de mantenimiento y copia verificada del estado actual.
Paso 10: Reforzar seguridad

Para producción, revisa estas prácticas:
- Guarda backups fuera del disco principal.
- Protege el repositorio con permisos restrictivos.
- No expongas PostgreSQL en
5432/tcpa todo Internet. - Si habilitas acceso remoto, limita IPs desde firewall.
- Prueba restores de forma periódica.
- Monitorea espacio disponible.
- Documenta RPO y RTO: cuánto dato puedes perder y cuánto tiempo puedes estar caído.
- Combina pgBackRest con snapshots o copias del servidor cuando corresponda.
- No guardes contraseñas en texto plano sin controles de permisos.
Problemas frecuentes
stanza-create falla por permisos
Revisa que el usuario postgres pueda leer el directorio de datos y escribir en el repositorio:
sudo ls -ld /var/lib/pgbackrestsudo ls -ld /var/lib/postgresql/16/mainEl check falla por archivado WAL
Verifica archive_mode y archive_command:
sudo -u postgres psql -c "SHOW archive_mode;"sudo -u postgres psql -c "SHOW archive_command;"Después de cambiar postgresql.conf, reinicia PostgreSQL.
El backup ocupa demasiado espacio
Ajusta retención, revisa la frecuencia de full backups y evalúa mover el repositorio a un volumen dedicado. No bajes retención sin entender qué puntos de recuperación perderás.
pg_dump o pgBackRest: ¿cuál usar?
pg_dump es útil para dumps lógicos, migraciones selectivas y bases pequeñas. pgBackRest es mejor cuando necesitas backups físicos, incrementales y una estrategia más cercana a producción.
Conclusión
PostgreSQL merece una política de backups pensada, no un comando improvisado. pgBackRest te permite construir una base sólida: backups completos, incrementales, retención y restauración verificable.