Automatizar backups de PostgreSql

Ya vimos cómo hacer un backup en PostgreSql. Ahora, para ahorrarnos tiempo y tener algo más de tranquilidad, vamos a ver cómo automatizar ese proceso.

Si por casualidad el primer pensamiento es poner las instrucciones para pg_dump en un script, lamento desilusionar. Tendríamos un pequeño problema, y es que el comando se quedará frenado pidiéndonos la contraseña del usuario que quiere hacer el backup.

Como siempre, tenemos una salida.

Nuestro nuevo mejor amigo en este caso será pgpass.

Pgpass es una variable de entorno.

Este archivo no se crea por defecto, y varía levemente el procedimiento si lo usamos en Linux o en Windows. En ambos casos, el archivo contendrá la misma información:

host:puerto:basededatos:usuario:contraseña

Caso Windows

Para usarlo, debemos crear la carpeta postgresql dentro de c:\documents and settings\(usuario que correrá la tarea)\datos de programa.

Dentro de esa nueva carpeta, pondremos el archivo pgpass.conf.

Ahora si, dentro del archivo, podríamos tener los siguientes parámetros:

192.168.0.1:5432:mibase:miusuario:micontraseña

Caso Linux

En mi ejemplo, el encargado de realizar el backup será nuestro querido root.

Para que funcione, siempre y cuando tengamos los privilegios, vamos dentro de la carpeta /root y creamos el archivo .pgpass.

Una forma rapida, y presuponiendo que estamos logueados como root, sería la siguiente.

echo "192.168.0.1:5432:mibase:miusuario:micontraseña" >> ~/.pgpass

Si todo salió bien, ya tenemos creado el archivo.

¿Y ahora?.

Bueno, ya tenemos resuelto el detalle de la contraseña. Ahora, simplemente, creamos un archivo que será el que vamos a programar para que se ejecute automaticamente y nos realize el backup.

Dentro de nuestro script pondremos el comando:

pg_dump -i -h 192.168.0.1 -p 5432 -U miusuario -F c -b -v -f "/home/damian/backups/mibase.backup" mibase

Ahora cuando el script necesite la contraseña para conectarse, la tomará del Pgpass… y asunto resuelto.

Tweet about this on TwitterShare on Google+Email this to someoneShare on FacebookShare on LinkedIn

17 pensamientos en “Automatizar backups de PostgreSql

  1. Javier Scappini

    Hola,

    Muy interesante blog. Mi pregunta seria la siguiente: El titulo del post es Automatizar backup en postgresql, ahora, se resolvio el problema de pasarle el pass como variable de entorno, para evitar que quede el cursor pidiendonos el password, pero, para que sea completamente automatizado, no deberiamos agregar una entrada en el crontab por ejemplo? Como hariamos eso?

    Exitos!

    Javier Scappini.

  2. Damián Autor

    Gracias por la parte de lo interesante.
    En cuanto a tu pregunta, el post comienza haciendo referencia a uno previo, donde se indican los comandos para correr desde consola para el dump (que se pueden agregar a un script) y luego programarlo, ya sea en el Crontab o en el Administrador de tareas (dependiendo de tu OS, claro está).

    Igualmente ya había pensado en escribir sobre programar tareas, así que ya con tu pregunta tengo la excusa para ponerme a hacerlo.
    Saludos.

  3. clara

    hola
    me podrian ayudar, a mi me aparece tambien para que introduzca la contraseña y ya probé de la forma que me dicen pero no me sale será que si le envio algun parametro o como ejecuto desde visual.net.
    yo ejecuto el backup desde el shell() pero como le mando el parametro de password…
    Ayudenme si ..
    Gracias

  4. Damián Autor

    @Clara

    En el caso de pg_dump, no puede pasarse la contraseña como parámetro. Para simular eso, es que tenés la posibilidad de usar el archivo pgpass.
    Supongo que estás usando Windows, ¿no?.
    En ese caso tendrías que crear el archivo pgpass en la carpeta del usuario que ejecuta el script.
    Saludos.

  5. clara

    hola ahora será que podré colocar mi codigo en un .bat y hacer que mis tareas programadas me hagan solo el backup cada cierto dia…
    Gracias.

  6. Gaby

    Quisiera que me ayudaras soy nueva en postgre y quisiera saber como utilizo el pg_dump en Postgre bajo ambiente Windows para realizar un respaldo de las bases de datos. Gracias por su colaboracion

  7. Damián Autor

    @Gaby

    Deberías ampliarme un poco el problema, ya que el post trata de ser lo suficientemente explicativo.
    La diferencia sería, ya que estás con Windows, que tenés que indicar al path completo al ejecutable de pg_dump. Debería ser algo como esto: C:\Archivos de programa\PostgreSQL\8.3\bin\pg_dump.exe.
    Cambiando eso ya podés usar los parámetros indicados en el post y tendrías que poder obtener el backup.
    Saludos.

  8. Arturo

    Buenos dias probe todo esto todo va bien desde la consola pero cuando hago le sentencia de respaldo en un archivo cron me crea el archivo y no respalda la base de datos crea un archivo de texto vacio, que puedo hacer para corregir?
    gracias de antemano

  9. Damián Autor

    @Arturo

    ¿Tenés creado el archivo ~/.pgpass con los valores correspondientes dentro del usuario que va a ejecutar la tarea?

  10. Arturo

    lo habia creado asi ~/.pgpass y me pedia la contraseña de mi postgre cuando lo hacia desde consola y cuando lo hacia desde el archivo cron no me creaba al archivo .backup, lo cambie a .pgpass dentro del usuario que lo ejecuto desde consola y dejo de pedirme la contraseña y me crea el archivo de respaldo pero vacio; utilizando el cron cuando lo corro desde la consola si funciona bien, te comunico que cuando lo corro desde la consola no es el usuario postgre es otro, no es el mismo equipo donde esta la base de datos y si funciona todo correcto

  11. Andres

    Hola
    Ya tengo creado el archivo pgpass en la ruta especificada, pero al utilizar el archivo .bat donde tengo el codigo del bck, sea por consola o con el administrador de tareas, éste se detiene pidiendo la contraseña.

    Que puedo hacer entonces??

    De antemano muchas gracias por su ayuda!!

  12. Andres

    Adicionalmente, como hago para que al momento de generar el archivo este quede en el nombre con la fecha (y hora si es posible) del bck?

    Ej: c:\mibck201011091400.backup

  13. Damián Autor

    @Andres

    ¿Con qué usuario estás corriendo el bat y en qué carpeta creaste la subcarpeta postgresql con el archivo pgpass?

  14. Damián Autor

    @Andres

    Revisa la documentación para MS-DOS. Tenés, por ejemplo, la variable %DATE% que podés utilizar para crear el nombre del archivo.

  15. Vladimir

    Realice todo el procedimiento que me indica y me sigue pidiendo contraseña.
    El archivo .bat lo tengo en una carpeta llamada scripts, cree el archivo pgpass y lo copie dentro del appdata del usuario, cuento con un windows server 2008 y postgres 8.4

  16. Damián Autor

    @Vladimir

    ¿El archivo .pgass está dentro del usuario que ejecuta la tarea programada o dentro del mismo usuario que estás usando para correr el comando por consola?

  17. Pepe

    Gracias por el artículo, muy interesante.
    He necesitado añadir permisos 0600 al arhivo y ha funcionado perfectamente.

Los comentarios están cerrados.