viernes, 27 de junio de 2008

Backup de Postgres desde Java

El otro día tuve un montón de problemas queriendo respaldar una base de datos desde portgres, pedi ayuda a los broders del grupo de ubuntu y el prix Igor me ayudo bastante, hasta el punto que lo que el mae me paso lo combine con otra cosa que habia leído en internet y me soluciono el problema.

Anteriormente pensaba que hacer el respaldo iba a se mas facil, pero habia un problema, que al ejecutar el comando de respaldo, el servidor postgres se queda esperando que el usuario introduzca la contraseña, lo cual yo no sabia como pasar de parámetro, tons, la forma de hacerlo fue asi miren el codigo:



Lo que se hace es crear un proceso con el comando de pg_dump que es el encargado de respaldar lo que hay en el server de postgres y establecer una variable de entorno (PGPASSWORD), dicha variable es la que almacena la clave del usuario de postgres que esta tratando de conectarse, tons, asunto resuelto, de esta forma es como pasarle la clave en forma de parametro.

Espero les sirva, para consultas, jeje, dejen su comentario.

17 comentarios:

Javier Scappini - The TemplarKnight dijo...

Hola! Excelente blog! He hecho pequeñitas modificaciones a tu codigo, y lo he publicado... (javierscappini.blogspot.com)

Exitos y Adeltante!

"Sigue con la mente abierta y la imaginacion indomita!"

Javier Scappini.

eos87 dijo...

ok, me voy a dar una vuelta por el tuyo.

Saludos

D.F.P dijo...

¿No está repetida la llamada a getRuntime?

r = Runtime.getRuntime();

Si hace falta ponerla las 2 veces, ¿podrías explicar por qué?

Helmy Giácoman "Eos87" dijo...

creo que tenes razon, la sentencia
r = Runtime.getRuntime(); está repetida sin ningún sentido.

Gracias por la aclaración, la verdad es que no me fije. Voy a corregirlo

luijo dijo...

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.

Anónimo dijo...

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

Anónimo dijo...

Hola,

Me parece muy bueno el apunte sobre el ProcessBuilder desde hace un tiempo andaba buscando algo asi.
Hice una modificaciones al codigo para obtener lo que queria, asi me ha funcionado. Muchs Gracias.

Anónimo dijo...

Como mencione, con las modificaciones realizadas me ha funcionado y ademas he hecho una pequeña apliacion que maneja las copias de seguridad, si alguien esta interesado en los fuentes del programa escriba a la direccion calojamatt@dessoft.4t.com

zagalx dijo...

Hola, me sirvieron mucho tu código, lo he mejorado y expandido al punto de crear una librería .jar, te invito a que la revises http://zagal-jmusic.blogspot.com/2010/02/dbtools-backup-automaticos-y-otros.html

Saludos...

NT dijo...

Hola, hay manera de hacerlo desde un cliente¿?
saludos y gracias.

Anónimo dijo...

hola , ktal un saludo. Bueno mi pregunta es la "r", del
Runtime r = Runtime.getRuntime();

q hace??

Marv dijo...

Hola Buenos días, para descargar el código sólo está la opción de Megaupload y por culpa de la SOPA no se puede descargarpodrías enviarmelo a mi correo marv.lopez@hotmail.com

Gracias de antemano

Anónimo dijo...

Hola, te quería felicitar por este excelente trabajo, me sirvió bastante.. sigue adelante con ese mismo animo y dedicación..

Att. Diego.

Fabian Rivera dijo...

hola disculpa el código que dejaste publicado lo copie en netbeans pero me marca este error java.io.IOException: Cannot run program "pg_dump": CreateProcess error=2, El sistema no puede encontrar el archivo especificado
me gustaría que me ayudaran a corregirlo

Anónimo dijo...

Sucede porque debes decirle la ruta completa donde se encuentra el mi caso seria (Linux):

/opt/PostgreSQL/9.3/bin/pg_dump

Miguel dijo...

Me ayudo mucho su aporte sobre todo despues de intentar en documentacion sin encontrar un camino corto. Pero no supe como pasar el parametro -h con la direccion del servidor de datos pues intente colocandolo igual que en el pg_dump nativo del postgres pero no obtuve ningun resultado con : ("pg_dump", "-v", "-f", path, "-h" , "192.168.0.28" , "-U" , user , "-t" , tabla, "-a" , basededatos) pero si no coloco la direccion del servidor con -h y uso una base de datos local entonces si hace el vaciado de datos no se si me puede ayudar a ver donde esta el problema pues yo intente colocarlo como lo hago normalmente y no me funciono dentro del processBuilder.'gracias

Miguel dijo...

Me ayudo mucho su aporte sobre todo despues de intentar en documentacion sin encontrar un camino corto. Pero no supe como pasar el parametro -h con la direccion del servidor de datos pues intente colocandolo igual que en el pg_dump nativo del postgres pero no obtuve ningun resultado con : ("pg_dump", "-v", "-f", path, "-h" , "192.168.0.28" , "-U" , user , "-t" , tabla, "-a" , basededatos) pero si no coloco la direccion del servidor con -h y uso una base de datos local entonces si hace el vaciado de datos no se si me puede ayudar a ver donde esta el problema pues yo intente colocarlo como lo hago normalmente y no me funciono dentro del processBuilder.'gracias