Skip to content

Backup y restauración de la base de datos

Scripts para volcar y restaurar la base PostgreSQL del backend.

Requisitos

  • Cliente PostgreSQL instalado (pg_dump, psql) y en el PATH.
  • Acceso a la base (usuario/contraseña vía variables de entorno o ~/.pgpass).

Variables de entorno

VariableDescripciónPor defecto
PGHOSTHost de PostgreSQLlocalhost
PGPORTPuerto5432
PGDATABASENombre de la basedespertares_dev
PGUSERUsuariopostgres
PGPASSWORDContraseña (opcional)— (usa .pgpass si no)

Para staging/prod, define PGDATABASE (y si aplica PGHOST, PGUSER, PGPASSWORD) según el entorno.

Backup

Desde la raíz del repo:

bash
./scripts/backup-db.sh

Se genera un archivo backup_YYYYMMDD_HHMMSS.sql en la raíz del proyecto.

Para indicar el archivo de salida:

bash
./scripts/backup-db.sh /ruta/backup_manual.sql

Restauración

Precaución: el script de backup usa --clean --if-exists, por lo que el SQL generado incluye DROP de objetos. Al restaurar en una BD existente, se eliminarán y recrearán tablas/objetos. Haz backup antes de restaurar sobre una BD en uso.

bash
./scripts/restore-db.sh backup_20250226_120000.sql

Puedes especificar la base de destino con:

bash
PGDATABASE=despertares_staging ./scripts/restore-db.sh backup_20250226_120000.sql

Algunos avisos o errores de DROP ... does not exist son normales; el script continúa con la creación de objetos.


¿El backend sube el backup a S3?

No. El backend no ejecuta backups ni los sube a S3. Los backups son responsabilidad de infraestructura/operaciones:

  • Los scripts backup-db.sh y restore-db.sh solo generan o consumen un archivo local.
  • La programación (cron) y la subida a S3 se configuran aparte, en el servidor o en tu pipeline (CI/CD, job externo).

Así se mantiene la separación de responsabilidades: la API no necesita credenciales de BD para dump ni de S3 para subir; un cron o un job ejecuta el script y luego sube el archivo.

Ejemplo: subir el backup a S3 (fuera del backend)

Después de ejecutar el script de backup, puedes subir el archivo a un bucket desde la misma máquina (cron o script wrapper):

bash
# Ejemplo: backup diario y subida a S3 (ejecutar en cron, no desde la API)
./scripts/backup-db.sh /var/backups/despertares/backup_$(date +%Y%m%d).sql
aws s3 cp /var/backups/despertares/backup_$(date +%Y%m%d).sql s3://tu-bucket-backups/despertares/ --only-show-errors

Configura AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY (o IAM role) en el entorno donde se ejecute. El backend no implica ni ejecuta este paso.