Appearance
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 elPATH. - Acceso a la base (usuario/contraseña vía variables de entorno o
~/.pgpass).
Variables de entorno
| Variable | Descripción | Por defecto |
|---|---|---|
PGHOST | Host de PostgreSQL | localhost |
PGPORT | Puerto | 5432 |
PGDATABASE | Nombre de la base | despertares_dev |
PGUSER | Usuario | postgres |
PGPASSWORD | Contraseñ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.shSe 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.sqlRestauració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.sqlPuedes especificar la base de destino con:
bash
PGDATABASE=despertares_staging ./scripts/restore-db.sh backup_20250226_120000.sqlAlgunos 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.shyrestore-db.shsolo 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-errorsConfigura 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.