Title: Actividad 14: Backups y Restauración (PostgreSQL)
Course: 2025 - LISI - Base de Datos Avanzadas 3-3 > Section: Unidad 2 - Seguridad y administración de bases de datos

🎯 Objetivo

Investigar y aplicar buenas prácticas de respaldo y restauración en PostgreSQL. Elaborar código ejecutable para hacer backup y restore, mostrando el resultado en consola. El nombre del alumno y del profesor debe aparecer dentro del código y en los nombres de los archivos generados.

📝 Instrucciones

1. Identificación
Al inicio del documento escribe tu nombre completo y el nombre del profesor.
2. Investigación (1 página máx.)
Incluye, con tus palabras y referencias:

- ¿Qué es un backup lógico vs. físico? (pg_dump/pg_restore vs. pg_basebackup/WAL/PITR).
- Tipos/frecuencia y retención (regla 3-2-1, rotación, verificación de integridad).
- Buenas prácticas:
  - Formato custom (-Fc), compresión, etiquetado con fecha, cifrado/resguardo de credenciales, pruebas periódicas de restauración, logs.
  - No hardcodear contraseñas; usar .pgpass o variables de entorno.
- Prueba de restauración: restaurar en base de datos diferente y verificar datos.

1. Preparación del entorno (rápido)

- Ten a mano las utilerías: pg_dump, pg_restore, psql (vienen con PostgreSQL).
- Crea una carpeta de trabajo, por ejemplo: C:\pg\respaldos\ (Windows) o ~/pg/respaldos/ (Linux/Mac).

1. Código de respaldo (requerido)
Crea un script que haga backup formato custom (-Fc), con compresión y nombre de archivo con tu nombre y el del profesor.

El nombre del alumno y del profesor deben estar dentro del código (en variables y en comentarios de cabecera).

- Opción Windows (.bat) – guárdalo como backup.bat:

@echo off
REM ==========================
REM  ACTIVIDAD 12 - BACKUP
REM  Alumno: NOMBRE_ALUMNO_AQUI
REM  Profesor: NOMBRE_PROFESOR_AQUI
REM ==========================
setlocal

:: >>> Personaliza estas variables <<<
set ALUMNO=NOMBRE_ALUMNO_AQUI
set PROFESOR=NOMBRE_PROFESOR_AQUI
set HOST=localhost
set PORT=5432
set USER=postgres
set DB=tu_basedatos
set OUTDIR=C:\pg\respaldos

:: Timestamp YYYYMMDD_HHMMSS
for /f "tokens=1-4 delims=/- " %%a in ("%date%") do set FECHA=%%d%%b%%c
for /f "tokens=1-2 delims=:." %%h in ("%time%") do set HORA=%%h%%i
set TS=%FECHA%_%HORA%

:: Archivo de salida incluye alumno y profesor
set OUTFILE=%OUTDIR%\backup_%ALUMNO%_%PROFESOR%_%DB%_%TS%.dump

:: Evita escribir la contraseña en el script: usa .pgpass o variable de entorno temporal
:: set PGPASSWORD=TU_PASSWORD & ^
pg_dump -h %HOST% -p %PORT% -U %USER% -d %DB% -F c -Z 9 -v -f "%OUTFILE%"

echo Backup generado: %OUTFILE%
endlocal



1. Código de restauración (requerido)
Restaura en otra base (ej. tu_basedatos_restore) y muestra salida en consola.

- Windows (.bat) – restore.bat:

@echo off
REM ==========================
REM  ACTIVIDAD 12 - RESTORE
REM  Alumno: NOMBRE_ALUMNO_AQUI
REM  Profesor: NOMBRE_PROFESOR_AQUI
REM ==========================
setlocal

set HOST=localhost
set PORT=5432
set USER=postgres
set NEWDB=tu_basedatos_restore
set DUMPFILE=C:\pg\respaldos\backup_NOMBRE_ALUMNO_AQUI_NOMBRE_PROFESOR_AQUI_tu_basedatos_YYYYMMDD_HHMMSS.dump

REM Crear BD destino (si no existe)
psql -h %HOST% -p %PORT% -U %USER% -c "CREATE DATABASE %NEWDB%;"

REM Restaurar con verbosidad
pg_restore -h %HOST% -p %PORT% -U %USER% -d %NEWDB% -v "%DUMPFILE%"

REM Verificar objetos (ejemplo)
psql -h %HOST% -p %PORT% -U %USER% -d %NEWDB% -c "\dt"

endlocal

Importante:

- Sustituye NOMBRE_ALUMNO_AQUI y NOMBRE_PROFESOR_AQUI por los reales dentro del código.
- No pegues contraseñas en el script; usa .pgpass (Windows: %APPDATA%\postgresql\pgpass.conf, Linux/Mac: ~/.pgpass) o variables de entorno.
- El formato custom (-F c) permite restauraciones selectivas y es la práctica recomendada.

1. Evidencia en consola (obligatoria)
En tu PDF incluye:

- Salida de consola del backup (líneas pg_dump: ... y el Backup generado: ...).
- Listado de la carpeta de respaldos mostrando el archivo creado (ej. dir o ls -lh).
- Salida de consola del restore (líneas pg_restore: ... y el \dt mostrando tablas).
- Los scripts completos (backup.* y restore.*) con los nombres de alumno y profesor visibles en comentarios/variables y en el nombre del archivo .dump.

1. Entrega
Un solo PDF con:

- Identificación (alumno/profesor).
- Investigación (1 página máx.) con referencias.
- Código de los scripts.
- Capturas o texto de consola (backup, listado, restore, verificación).

🎯 Objetivo

Investigar y aplicar buenas prácticas de respaldo y restauración en PostgreSQL. Elaborar código ejecutable para hacer backup y restore, mostrando el resultado en consola. El nombre del alumno y del profesor debe aparecer dentro del código y en los nombres de los archivos generados.

📝 Instrucciones

1. Identificación
Al inicio del documento escribe tu nombre completo y el nombre del profesor.
2. Investigación (1 página máx.)
Incluye, con tus palabras y referencias:

- ¿Qué es un backup lógico vs. físico? (pg_dump/pg_restore vs. pg_basebackup/WAL/PITR).
- Tipos/frecuencia y retención (regla 3-2-1, rotación, verificación de integridad).
- Buenas prácticas:
  - Formato custom (-Fc), compresión, etiquetado con fecha, cifrado/resguardo de credenciales, pruebas periódicas de restauración, logs.
  - No hardcodear contraseñas; usar .pgpass o variables de entorno.
- Prueba de restauración: restaurar en base de datos diferente y verificar datos.

1. Preparación del entorno (rápido)

- Ten a mano las utilerías: pg_dump, pg_restore, psql (vienen con PostgreSQL).
- Crea una carpeta de trabajo, por ejemplo: C:\pg\respaldos\ (Windows) o ~/pg/respaldos/ (Linux/Mac).

1. Código de respaldo (requerido)
Crea un script que haga backup formato custom (-Fc), con compresión y nombre de archivo con tu nombre y el del profesor.

El nombre del alumno y del profesor deben estar dentro del código (en variables y en comentarios de cabecera).

- Opción Windows (.bat) – guárdalo como backup.bat:

@echo off
REM ==========================
REM  ACTIVIDAD 12 - BACKUP
REM  Alumno: NOMBRE_ALUMNO_AQUI
REM  Profesor: NOMBRE_PROFESOR_AQUI
REM ==========================
setlocal

:: >>> Personaliza estas variables <<<
set ALUMNO=NOMBRE_ALUMNO_AQUI
set PROFESOR=NOMBRE_PROFESOR_AQUI
set HOST=localhost
set PORT=5432
set USER=postgres
set DB=tu_basedatos
set OUTDIR=C:\pg\respaldos

:: Timestamp YYYYMMDD_HHMMSS
for /f "tokens=1-4 delims=/- " %%a in ("%date%") do set FECHA=%%d%%b%%c
for /f "tokens=1-2 delims=:." %%h in ("%time%") do set HORA=%%h%%i
set TS=%FECHA%_%HORA%

:: Archivo de salida incluye alumno y profesor
set OUTFILE=%OUTDIR%\backup_%ALUMNO%_%PROFESOR%_%DB%_%TS%.dump

:: Evita escribir la contraseña en el script: usa .pgpass o variable de entorno temporal
:: set PGPASSWORD=TU_PASSWORD & ^
pg_dump -h %HOST% -p %PORT% -U %USER% -d %DB% -F c -Z 9 -v -f "%OUTFILE%"

echo Backup generado: %OUTFILE%
endlocal



1. Código de restauración (requerido)
Restaura en otra base (ej. tu_basedatos_restore) y muestra salida en consola.

- Windows (.bat) – restore.bat:

@echo off
REM ==========================
REM  ACTIVIDAD 12 - RESTORE
REM  Alumno: NOMBRE_ALUMNO_AQUI
REM  Profesor: NOMBRE_PROFESOR_AQUI
REM ==========================
setlocal

set HOST=localhost
set PORT=5432
set USER=postgres
set NEWDB=tu_basedatos_restore
set DUMPFILE=C:\pg\respaldos\backup_NOMBRE_ALUMNO_AQUI_NOMBRE_PROFESOR_AQUI_tu_basedatos_YYYYMMDD_HHMMSS.dump

REM Crear BD destino (si no existe)
psql -h %HOST% -p %PORT% -U %USER% -c "CREATE DATABASE %NEWDB%;"

REM Restaurar con verbosidad
pg_restore -h %HOST% -p %PORT% -U %USER% -d %NEWDB% -v "%DUMPFILE%"

REM Verificar objetos (ejemplo)
psql -h %HOST% -p %PORT% -U %USER% -d %NEWDB% -c "\dt"

endlocal

Importante:

- Sustituye NOMBRE_ALUMNO_AQUI y NOMBRE_PROFESOR_AQUI por los reales dentro del código.
- No pegues contraseñas en el script; usa .pgpass (Windows: %APPDATA%\postgresql\pgpass.conf, Linux/Mac: ~/.pgpass) o variables de entorno.
- El formato custom (-F c) permite restauraciones selectivas y es la práctica recomendada.

1. Evidencia en consola (obligatoria)
En tu PDF incluye:

- Salida de consola del backup (líneas pg_dump: ... y el Backup generado: ...).
- Listado de la carpeta de respaldos mostrando el archivo creado (ej. dir o ls -lh).
- Salida de consola del restore (líneas pg_restore: ... y el \dt mostrando tablas).
- Los scripts completos (backup.* y restore.*) con los nombres de alumno y profesor visibles en comentarios/variables y en el nombre del archivo .dump.

1. Entrega
Un solo PDF con:

- Identificación (alumno/profesor).
- Investigación (1 página máx.) con referencias.
- Código de los scripts.
- Capturas o texto de consola (backup, listado, restore, verificación).