A logo showing the text blog.marcnuri.com
English
Inicio»Java»Aplicación Java para copias de seguridad programadas de PostgreSQL usando pg_dump (Sólo Windows)

Entradas Recientes

  • Fabric8 Kubernetes Client 7.2.0 está disponible!
  • Conectarse a un servidor MCP con JavaScript y AI SDK
  • Conectarse a un servidor MCP con JavaScript y LangChain.js
  • El Futuro de las Herramientas para Desarrolladores en la era de la IA
  • Conectarse a un servidor Model Context Protocol (MCP) con Java y LangChain4j

Categorías

  • Antiguo
  • Front-end
  • Go
  • Herramientas
  • Industria y negocios
  • Inteligencia Artificial
  • Java
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales

Archivos

  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • agosto 2022
  • julio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • diciembre 2020
  • octubre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • octubre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • marzo 2014
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

Aplicación Java para copias de seguridad programadas de PostgreSQL usando pg_dump (Sólo Windows)

2007-03-27 en Java / Antiguo etiquetado Backup / cron / Base de Datos / Java / PostgreSQL / Windows por Marc Nuri | Última actualización: 2025-01-28
English version

Las copias de seguridad de bases de datos son una parte esencial del mantenimiento del sistema, asegurando que los datos puedan ser recuperados en caso de fallo. En este artículo, os mostraré cómo automatizar las copias de seguridad de PostgreSQL utilizando una sencilla aplicación Java. La aplicación genera un archivo de copia de seguridad con la fecha actual interactuando con la utilidad pg_dump de PostgreSQL.

Nota

Este enfoque funciona en sistemas Windows y asume la disponibilidad de la herramienta pg_dump.exe y sus dependencias.

Automatizar las copias de seguridad de PostgreSQL con Java a demanda

  1. Generar un nombre de archivo: Crea un nombre de archivo con la fecha actual para organizar las copias de seguridad.
  2. Comprobar la existencia de archivos anteriores: Asegúrate de que no haya archivos duplicados o elimina versiones antiguas.
  3. Ejecutar pg_dump: Ejecuta el comando pg_dump con los parámetros adecuados para crear una copia de seguridad.

Aquí tienes el código Java completo:

PostgreSQLBackup.java
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;

public class PostgreSQLBackup {

  public void backupPGSQL() {
    try {
      // Define paths and PostgreSQL details
      String backupDirPath = "C:\\BACKUPS\\";
      String pgDumpPath = "C:\\Program Files\\PostgreSQL\\bin\\pg_dump.exe";
      //PostgreSQL variables
      String ip = "192.168.1.1";
      String user = "postgres";
      String database = "yourDatabase";
      String password = "yourPassword";

      // Generate filename with today’s date
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
      String date = dateFormat.format(new Date());
      String backupFile = backupDirPath + date + ".backup";

      // Ensure the backup directory exists
      File backupDir = new File(backupDirPath);
      if (!backupDir.exists() && !backupDir.mkdirs()) {
          throw new IOException("Could not create backup directory: " + backupDirPath);
      }

      // Delete any previous backup that might exist
      File backup = new File(backupFile);
      if (backup.exists()) {
          backup.delete();
      }

      // Configure ProcessBuilder for pg_dump
      ProcessBuilder pb = new ProcessBuilder(
          pgDumpPath,
          "-f", backupFile,
          "-F", "c",
          "-Z", "9",
          "-v",
          "-h", ip,
          "-U", user,
          database
      );
      pb.environment().put("PGPASSWORD", password);
      pb.redirectErrorStream(true);

      // Start the process and capture output
      Process process = pb.start();
      BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
      try {
        String line;
        while ((line = reader.readLine()) != null) {
          System.out.println(line);
        }
      } finally {
          reader.close();
      }

      // Wait for process to complete
      int exitCode = process.waitFor();
      if (exitCode != 0) {
          throw new RuntimeException("pg_dump failed with exit code: " + exitCode);
      }

      System.out.println("Backup completed successfully: " + backupFile);
    } catch (Exception e) {
      e.printStackTrace();
    }

  }
  public static void main(String[] args) {
    new PostgreSQLBackup().backupPGSQL();
  }
}

Puntos clave

  • Reemplaza las variables ip, user, database y password con los detalles de tu servidor PostgreSQL.
  • Asegúrate de que pg_dump.exe (y los archivos DLL necesarios) estén disponibles en pgDumpPath o actualiza la ruta para que refleje tu sistema.
  • La variable de entorno PGPASSWORD se utiliza para pasar la contraseña de forma segura a pg_dump.
  • El archivo de copia de seguridad se guarda en el directorio backupDirPath con el formato yyyyMMdd.backup.
  • La salida del proceso se captura e imprime en la consola para su seguimiento.

Automatizar las copias de seguridad de PostgreSQL con Java programadas en un horario

Para ejecutar la copia de seguridad automáticamente todos los días, puedes utilizar un TimerTask en Java:

ScheduledBackup.java
import java.util.*;

public class ScheduledBackup {
  public static void main(String[] args) {
    TimerTask backupTask = new TimerTask() {
        @Override
        public void run() {
            new PostgreSQLBackup().backupPGSQL();
        }
    };

    // Schedule the task to run every 24 hours (at 1:00 AM)
    Timer timer = new Timer();
    Calendar taskTime = Calendar.getInstance();
    taskTime.set(Calendar.HOUR_OF_DAY, 1);
    taskTime.set(Calendar.MINUTE, 0);
    taskTime.set(Calendar.SECOND, 0);

    // Adjust start time if it's already past the initial scheduled time
    if (new Date().after(taskTime.getTime())) {
        taskTime.add(Calendar.DAY_OF_YEAR, 1);
    }

    timer.scheduleAtFixedRate(backupTask, taskTime.getTime(), 1000L * 60 * 60 * 24);
    System.out.println("Scheduled backup task set for 1:00 AM daily.");
  }
}

Notas

  • Puedes configurar la hora programada ajustando el valor de Calendar.HOUR_OF_DAY.
  • Para sistemas de producción, considera utilizar planificadores externos como cron en Linux o el Programador de tareas en Windows.

Conclusión

Automatizar las copias de seguridad de PostgreSQL con una aplicación Java proporciona flexibilidad y permite la integración con otras herramientas. Aunque esta guía se centra en pg_dump, puedes ampliar la solución para incluir notificaciones, registro y manejo de errores según tus necesidades. Recuerda siempre proteger las credenciales y los archivos de copia de seguridad para garantizar la seguridad e integridad de tus datos.

Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos
Funciones recursivas en Java // Empleando recursión para sumar un array de númerosElegir una impresora programáticamente en Jasper Reports
© 2007 - 2025 Marc Nuri