Postgres backup desde Java

Mientras realizaba una recorrida por los blogs que suelo frecuentar, me encontré con una publicación interesante de eOS’s BLOG, donde desde un pequeño proceso en Java realiza un backup de Postgres.

Si bien el proceso es sencillo, del mismo podrás sacar algunas cosas interesante como:

  • Utilizar el comando pg_dump para exportar una base de datos PostgreSQL (algo así como el mysqldump de MySQL)
  • Ejecutar un comando desde Java (algo así como el system de C)
  • Setear variables en el entorno actual de ejecución

El código habla por si solo:

try {
        String path = "path del archivo de backup"
        Runtime r = Runtime.getRuntime();

        String user = "postgres";
        String dbase = "base_datos";
        String password = "tu_contraseña";

        Process p;
        ProcessBuilder pb;

        r = Runtime.getRuntime();       
        pb = new ProcessBuilder("pg_dump", "-v", "-D", "-f", path, "-U", user, dbase);
        pb.environment().put("PGPASSWORD", password);
        pb.redirectErrorStream(true);
        p = pb.start();       

    } catch (Exception e) {

}

Via: eOS’s BLOG

16 comentario en este artículoDeje el suyo
  1. muchas gracias por visitar mi blog, yo estuve googleando y de esa forma llegue hasta tu blog el cual me llamo mucho la atencion, especialmente por lo del look and feel de Nimbus.

    Saludos

  2. Esto tambien se puede aplicar para backups en los moviles, como respaldar la agenda en la memoria?

  3. No @Frank, me temo que nada que ver.

  4. Saludos, me parece muy bueno tu codigo y muy facil de entender, pero al copiarlo y compilarlo me surgio un poblemita con el ProcessBuilder, me gustaria saber que clase en especial tengo que imnportar para que funcione?, hasta luego gracias.

  5. Hola, sabes como hacer el backup desde php, he probado con la funcion exec y system para ejecutar el pg_dump desde una pagina php, pero no me funciona, alguna sugerencia? gracias!

  6. Hola !
    Primero muy bueno el ejemplo, me sirvió de mucho. Quisiera preguntarles algo; hice el mismo ejemplo, con parámetros distintos, para restaurar la base de datos. EL tema es que a veces funciona bien, y a veces no. Cuando no me restaura bien no me tira ninguna una excepción … es decir me la oculta … hay algún modo qué desde Java pueda ver la execpción que me esta tirando ?,
    Muchas gracias

    Damián

  7. Hello,

    I’m co-author from Geed Inside Blog and I’m very content that you saw and referenced my blog post about backup on postgres. I’m a Java Developer too and it is good to know a different way to do it directly from Java code.

    Very good post ;)

  8. hola, muy buena informacion me sirvio de mucho, pero tengo una duda ya que lo que necesito ademas de restaurar los datos es restaurar tambien los roles , todo desde mi progrma en java, he utilizado el pg_dumpall -g , y me crea el backp, pero no puedo restaurarlo y no entiendo por que!, para restaurarlo uso el pg_restore … alguien me puede ayudar ??

  9. Silvia,

    El pg_dumpall utiliza las funciones de texto plano del pg_dump. Lo cual hace que sea incompatible con el pg_restore que solo acepta el output generado por pg_dump en formato tar. Es lamentable que la documentacion al respecto no este en un lugar mas visible.

  10. Gracias Roberto por tu colaboración.

    Saludos.

  11. Bueno gracias por el aporte, pero no crea nada.
    No funciona alguna configuracion extra…?

  12. Hola

    Muchas gracias por tu aporte sin embargo no me funciona existe una funcion extra o una biblioteca he importado import java.lang.processBuilder por otro lado me sale error en el constructor

    pb = new ProcessBuilder(“pg_dump”, “-v”, “-D”, “-f”, path, “-U”, user, dbase);

    me gustaria saber si podrias guiarme mejor

    Agradezco tu aporte y tu claboracion

    Salu2

    CarolJohana

  13. gracias me sirvio tu codigo, uaunque en windows me marcaba error pero se soluciono agregando a “pg_dump” la ruta para que lo encuentre “C:/Archivos de programa…………../postgres/…..pg_dump.exe”

  14. mil gracias brow!!!
    aurita le voi a probar
    :D

  15. Hola a mi entender esta muy fácil de entender, sin embargo pregunto, por que no pusiste la clase completa si ya lo probaste… digo por que veo en los comentarios que le ha costado trabajo a los programadores poder utilizarlo.

  16. hola me gustaria si me pudiera ayudar cuando pongo el codigo me salta al catch en esta sentencia
    p = pb.start();
    y no me hace el backup que puedo hcer???

Deje su comentario

Por favor, ingrese su nombre

Por favor, ingrese un correo-e válido

Por favor, ingrese su mensaje

luauf.com 2012

WordPress