Mejorar compatibilidad de backups SQL
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m5s

Resuelve problemas de compatibilidad entre versiones de PostgreSQL
al exportar e importar backups.

Cambios en export-database.post.ts:
- Agregar flags adicionales a pg_dump para mayor portabilidad:
  --no-tablespaces: evita referencias a tablespaces
  --no-security-labels: evita security labels
  --no-synchronized-snapshots: evita snapshots sincronizados
- Esto genera SQL más compatible entre diferentes instalaciones

Cambios en import-database.post.ts:
- Limpiar SQL antes de importar, removiendo comandos incompatibles:
  * SET transaction_timeout (no existe en todas las versiones)
  * SET idle_in_transaction_session_timeout
  * SET lock_timeout
  * \unrestrict (comando no reconocido)
- Agregar -q y -v ON_ERROR_STOP=1 a psql
- Mejorar detección de errores: solo fallar en ERROR/FATAL reales
- Reportar tamaño original y limpio del archivo

Con estos cambios, los backups exportados desde cualquier versión
de PostgreSQL se pueden importar correctamente sin errores de
compatibilidad.
This commit is contained in:
2025-11-22 04:30:55 -06:00
parent 055136a6f9
commit 730d2ce299
2 changed files with 47 additions and 16 deletions

View File

@@ -55,9 +55,15 @@ export default defineEventHandler(async (event) => {
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5)
const filename = `backup-seguidordelotes-${timestamp}.sql`
// Ejecutar pg_dump
// Usar PGPASSWORD en la variable de entorno para evitar prompt de contraseña
const command = `PGPASSWORD="${password}" pg_dump -h ${host} -p ${port} -U ${user} -d ${database} --clean --if-exists --no-owner --no-acl`
// Ejecutar pg_dump con opciones para máxima compatibilidad
// --clean: incluir DROP antes de CREATE
// --if-exists: usar IF EXISTS en los DROP
// --no-owner: no incluir comandos de ownership
// --no-acl: no incluir permisos
// --no-tablespaces: no incluir tablespaces
// --no-security-labels: no incluir security labels
// --no-synchronized-snapshots: no usar snapshots sincronizados
const command = `PGPASSWORD="${password}" pg_dump -h ${host} -p ${port} -U ${user} -d ${database} --clean --if-exists --no-owner --no-acl --no-tablespaces --no-security-labels --no-synchronized-snapshots`
console.log(' - Ejecutando pg_dump...')
const { stdout, stderr } = await execAsync(command, {