Restaurar backups de PostgreSql

Vamos a continuar con las operaciones que deben ser habituales para el mantenimiento de nuestras base de datos.

Hasta ahora ya habíamos visto cómo hacer un backup en Postgresql, y también, cómo hacerlo de manera automática.

Vamos ahora a la otra punta del circuito: restaurar una base desde nuestros backups.

El comando que vamos a utilizar (y conocer) es pg_restore.

Si lo aplicara a los ejemplos que antes dí sobre pg_dump, nuestro ejemplo de pg_restore seria el siguiente.

pg_restore -i -h localhost -p 5432 -U postgres -d mibase -v "/home/damian/backups/mibase.backup"

Una vez que lo ejecutemos, se nos pedirá la contraseña del usuario que vamos a usar.

Para conocer los parámetros que podemos pasarle al comando, nada mejor que darse una vuelta por la documentación oficial, ya que hay algún que otro detalle que estaría bueno conocer (y además, porque es buena práctica leer la documentación oficial).

Sobre los parámetros del ejemplo, paso a detallarlos.

  • -i le indica que ignore la versión (entre el comando y la base de datos).
  • -h localhost es el host de nuestro PostgreSql.
  • -p 5432 es la indicación del puerto donde corre el servicio.
  • -U postgres especifica que se usará el usuario postgres para la operación.
  • -d mibase es para que realize la restauración sobre una base de datos en particular, en este caso mibase.
  • -v ejecutará el comando en modo verbose (así podremos ir viendo la salida de cada paso del proceso).
  • /home/damian/backups/mibase.backup es el archivo que usaremos como backup y que queremos ingresar.

Hasta ahora, ya hemos podido realizar backups, automatizarlos, y ahora, ya podremos restaurar nuestras bases de datos desde la consola sin problemas.

Una recomendación para los que estén empezando a conocerse con PostgreSql, es suscribirse a la lista de correo en español.

Es bastante activa, y tiene integrantes ante los cuales hay que sacarse el sombrero, tanto por el conocimiento como por la colaboración que brindan.

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

32 pensamientos en “Restaurar backups de PostgreSql

  1. Anita

    Para restaurar mi backup de Postgres ejecuté lo siguiente como usuario Postgres
    1. createdb mibase -E unicode
    2. Me ubico en postgres/bin> pg_restore -i -h localhost -p 5432 -U postgres -d mibase -v “/u01/backup/backup.backup”
    Cuando ejecuto la línea del paso 2 no hace nada, me pone un signo > y no me pide ningún usuario. pg_restore si existe en el directorio bin..
    Puedes decirme que estoy haciendo mal?.

    Gracias
    Anita

  2. Damián Autor

    @Anita

    Como intercambiamos por mail, los ejemplos están correctos. El problema, que vos pudiste deducir, era por problemas de permisos de ejecución en tu sistema operativo.

  3. Charli

    Saludos. Resulta que realizando los pasos descritos a través del Command prompt de Postgres me dice lo siguiente:

    C:\Program Files\PostgreSQL\8.3\bin>pg_restore -i -h localhost -p 5432 -U postgres -d savystuors -v “C:\Users\Rafael\Documents\Mis archivos recibidos\savystuors.backup”
    pg_restore: conectando a la base de datos para reestablecimiento
    pg_restore: [archivador (bd)] falló la conexión a la base de datos «savystuors»:
    FATAL: database “savystuors” does not exist
    pg_restore: *** se abortó por un errorPero al ver en el pgAdmin III aparece la base de datos savystuors pero sin las tablas. Que sucede? Qué hice mal o como puedo hacer para portar correctamente la base de datos con las tablas?
    Ayuda!!!

  4. Charli

    Ah un detalle que se me escapó comentar es que estoy ejecutando desde Windows XP.

  5. Damián Autor

    @Charli

    ¿El backup cómo lo generaste?.
    Y de paso, ¿coinciden las versiones de base de datos?

  6. Charli

    Saludos. Te comento que al día siguiente de tener estos errores volví a hacer los pasos con más calma y Ups! hizo todo como se esperaba…tal vez los errores eran por algo que estaba haciendo mal producto del cansancio y la hora a la que estaba trabajando. Bueno, gracias por el post.

  7. mak

    al intentar subir un backup en postgres me sale sale el siguiente error:
    C:\Program Files\PostgreSQL\8.1\bin\pg_restore.exe -i -h localhost -p 5433 -U postgres -d “Clinica” -a -v “C:\Users\ghemo007\Desktop\backup\clinica.backup”
    pg_restore: [archivador] versión no soportada (1.11) en el encabezado del archivo

    Process returned exit code 1.
    me pueden ayudar

  8. Damián Autor

    @yo

    ¿Con qué versiones estás trabajando?
    (si usás datos reales es más fácil contactarte para tratar de darte una ayuda)

  9. carlos zuñiga

    Hola!
    Soy nuevo en este mundo de Pg.
    Ya cree un backup de mi base de datos.
    Sigo trabajando en mi aplicacion (Java-Netbeans) agregando datos y deseo restaurar la BD, pero al restaurarla me conserva los datos nuevos y me agrega los datos que estaban en el respaldo.

    me pueden ayudar??

    Version PostgreSQL8.4

  10. Damián Autor

    @carlos zuñiga

    ¿Haces eso sin eliminar los datos pre-restauración?

  11. carlos zuñiga

    @Damián

    Si, tan solo hago una restauracion, no elimino nada antes.

  12. carlos zuñiga

    ya solucione el problema:
    primero verifico que el archivo backup existe.
    si es asi, ejecuto los script para eliminar los datos de la BD y luego ejecuto el script de restauracion:

    saludos

  13. Nicolas

    De qué forma puedo restaurar un backup hecho con postgres plus standard hacia postgres plus advanced server?

  14. Damián Autor

    @Nicolás

    No puedo ayudarte por que no he usado esos productos.
    ¿No tienes soporte?

  15. Nicolas

    Muchas gracias de todas formas. Veré qué puedo hacer con la gente de EnterpriseDB que son los creadores de esos productos.

    Saludos

  16. Alberto

    Hola!

    Tengo un problemilla, he conseguido realizar un buckup de una base de datos de forma automática con un archivo.bat . A la hora de recuperarla creo otro archivo.bat con los siguientes comandos

    “C:Program Files\PostgreSQL\8.4\bin\”pg_restore.exe –host localhost –port 5432 –username postgres –dbname cinco –verbose “cinco.backup”

    me realiza la recuperación sin problemas, pero me pide la contraseña, he intentado

    hacer incluir la contraseña en el archivo de la siguiente forma:

    “C:Program Files\PostgreSQL\8.4\bin\”pg_restore.exe –host localhost –port 5432 –username postgres –password 123456 –dbname cinco –verbose “cinco.backup”

    Entonces me sale los siguientes errores:

    Invalid Binary “D:/C:Program Files….pg_restore.exe”
    no se por que razón si añado lo del password me coge mal la dirección donde tengo ubicado el pg_restore.exe

    y pg_restore: [archiver] could not open input file “123456”: no such file or directory.

    No se si me podrás ayudar.

    Gracias de antemano

  17. Diego Casteblanco

    Hola Damian, queria saber si me puedes colaborar con un tema, tengo que hacer una eliminacion de registros de una base de datos de postgres manteniendo la estructura, el proceso seria:
    1. Sacar archivo *.sql de la estructura (sin datos) de la DB actual, lo intente con:
    pg_dump -U postgres -d DB_old -s -O > /tmp/schema-DB_old.sql
    2. Crear nueva DB y cargar en esta la configuracion de esa estructura segun el archivo que genera el punto anterior, lo intente con:
    pg_dump -U postgres –d DB_new -f /tmp/schema-DB_old.sql
    3. Hacer Export de la DB antigua
    4. Hacer un import de la DB nueva segun el export anterior de los datos que necesito
    Los puntos que me estan poniendo inconveniente son el 1 y el 2, los demas ya lo he probado para otras aplicaciones y estan bien, el comando en linux se ejecuta sin errores, pero al verificar la DB_new no tiene ningun tipo de estructura. Tienes alguna sugerencia??………………..lo agradeceria mucho

  18. Damián Autor

    @Diego

    Cuando decís que verificás DB_new, ¿lo hacés en el dump o dentro de PostrgreSql una vez importado el file?.
    ¿Cómo estás haciendo la importación?.
    ¿Probaste usando el parámetro -v para ver el proceso detallado paso a paso?.
    Saludos.

  19. Damián Autor

    @fernanda

    El PgAdmin tiene la interfase gráfica para todo. Es más, lo que termina haciendo el programa, más allá de los parámetros que le indiques, es justamente esto.

  20. Alberto Fernandez Vidal

    hola Damian tengo un problema, queria ver si me puedes ayudar, saque una backup de postgres version 8.0, y en mi maquina la restaure pero no restaura bien los datos de una tabla, la version q utilizo es 8.4, al restaurar presiono “ok” y me sale lo siguiente: ¿estás seguro de que desea ejecutar una restauración de este archivo de nuevo?, y por mas q coloque ok o cancel, no restaura esa tabla q es grande, tiene 23 columnas.

    Muchas gracias

  21. Damián Autor

    @Alberto

    ¿Si hacés el restore en modo verbose obtienes algún dato extra o alguna información sobre el proceso?.
    ¿No logras ver errores en el proceso?.
    ¿El dump de la 8.0 lo hiciste con qué versión?. Es decir, ¿el cliente psql que utilizaste es el de la 8.0 o el de la 8.4?

  22. Walter

    Hola!.. estoy tratando de hacer una replicación heterogenea de PostgreSQL a cualquier otro gestor, estaba pensando hacerlo en mysql.. tienes alguna idea???…
    Gracias..

    Ya probe pg_dump para respaldos y luego levantar ese respaldo en mysql y hubo un problema de sintaxis.. por lo que lo dejé asi y entonces estoy buscando otra solucion..

  23. Damián Autor

    @Walter

    Hay varias herramientas que pueden ayudarte a que sea sencilla la transición. El Migration Toolkit de Mysql (que hace ya un buen tiempo que no uso) era la solución más amigable.
    Otra opción es exportar con pg_dump sólo el esquema y luego sólo los datos. De seguro tendrás que hacer algún ajuste, pero también puede servirte.
    Saludos.

  24. Walter

    Gracias por el consejo!..
    De hecho estaba intentando hacer una replicación en vez de una migración…

    Hay herramientas de replicación que permiten hacer una replicacion heterogenea, como rubyrep, sin embargo la configuración está para linux..

    Tienes alguna idea de hacerlo en windows, es para cuestiones prácticas solamente.?

  25. Damián Autor

    @Walter

    Tanto el Migration Toolkit como la bajada con pg_dump del esuqema y luego de los datos en formato plano pueden usarse/hacerse en Windows.

Los comentarios están cerrados.