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/tcp solo 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_lsclusters

Verás una salida similar a:

Ver Cluster Port Status Owner    Data directory16  main    5432 online postgres /var/lib/postgresql/16/main

Anota:

  • 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/main

Ajusta estos valores a tu servidor real.

Paso 2: Instalar pgBackRest

Instala pgBackRest desde los paquetes disponibles:

sudo apt updatesudo apt install -y pgbackrest

Paso 1

Verifica la instalación:

pgbackrest version

Paso 2

Crea el directorio del repositorio local:

sudo mkdir -p /var/lib/pgbackrestsudo chown postgres:postgres /var/lib/pgbackrestsudo chmod 750 /var/lib/pgbackrest

Paso 3

Paso 3: Configurar pgBackRest

Edita el archivo principal:

sudo nano /etc/pgbackrest.conf

Agrega 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/main

Qué 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.conf

Paso 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.conf

Asegúrate de tener estos valores:

archive_mode = onarchive_command = 'pgbackrest --stanza=main archive-push %p'wal_level = replicamax_wal_senders = 3

Reinicia PostgreSQL:

sudo systemctl restart postgresql

Comprueba el estado:

sudo systemctl status postgresql --no-pager

Paso 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-create

Valida la configuración:

sudo -u postgres pgbackrest --stanza=main check

Si 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 backup

Consulta el estado:

sudo -u postgres pgbackrest --stanza=main info

Deberí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.service

Contenido:

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 backup

Contenido:

[Unit]Description=Run pgBackRest incremental backup daily[Timer]OnCalendar=*-*-* 02:30:00Persistent=true[Install]WantedBy=timers.target

Activa el timer:

sudo systemctl daemon-reloadsudo systemctl enable --now pgbackrest-main-backup.timersudo systemctl list-timers --all | grep pgbackrest

Para ver logs:

journalctl -u pgbackrest-main-backup.service --no-pager

Paso 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 postgresql

Haz 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/main

Restaura:

sudo -u postgres pgbackrest --stanza=main restore

Inicia PostgreSQL:

sudo systemctl start postgresqlsudo systemctl status postgresql --no-pager

Valida 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/tcp a 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/main

El 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.

Cloud Serversby Donweb

Todo el poder de la nube a tus proyectos y aplicaciones.
Alojamiento ultra rápido, escalable y con alta disponibilidad.

  • Performance que te sorprenderá
  • Rápida escalabilidad y sin limitaciones
  • Arquitectura de alta disponibilidad
  • Soporte experto y ejecutivos de cuenta
  • Pagos en tu moneda y facturación local

Descubre la mejor solución de Cloud Hosting