You are on page 1of 6

Forma correcta de sacar un respaldo (backup) en PostgreSQL

Publicado por Rolando en Bases De Datos el 07 9th, 2008 | 68 Comentarios

Esta base de datos es una de las mejores, y a mi en particular me gusta mas que MySQL, pero sigue siendo un dolor de cabeza a la hora de hacer respaldos. A continuacin les enseare como hacer respaldos de una manera rpida y sencilla. Con este tipo de respaldo no vamos a perder SP, Vistas, tablas, ni nada de data etc. Vamos hacer de cuenta que la base de datos que queremos hacer respaldo se llama prueba. Yo voy a utilizar el usuario de postgres para trabajar con esto. Pero podran usar cualquier otro usuar io. Yo para pasarme al usuario postgres ejecuto el siguiente comando como root: www:/etc# su postgres postgres@www:/etc$ Ya siendo usuario postgres no tengo ningn tipo de restriccin y puedo ejecutar cualquiera de los comandos mencionados a continuacin. Con el siguiente comando sacaremos respaldo del esquema (schema) de la base de datos: pg_dump -sv prueba -O > /backup/prueba.schema.sql Con el siguiente comando sacaremos el repaldo de la DATA de la base de datos: pg_dump -Fc -f /backup/prueba.data.dump -a disable-triggers prueba Estamos usando las opciones -Fc que significa la F de formato y la c de custom, estamos utilizando el formato custom, para as al momento de restaurar la base de datos en otro server o en otra base de datos se nos har mas fcil porque vamos a utilizar el comando pg_restore. Les adjunto un poco mas de informacin en ingles con respecto al dump de postgreSQL en formato custom.

Output a custom archive suitable for input into pg_restore. This is the

most flexible format in that it allows reordering of loading data as well as object definitions. This format is also compressed by default.

La opcin -f lo uso para especificar el archivo. La opcin -a especificar que quiero solo exportar la data. La opcin disable-triggers la uso para que no de problemas a la hora de hacer la restauracin. Estos comandos nos crearan dos archivos, uno con el esquema (schema) y otro con la data de la base de datos. Para restaurar la informacin haremos lo siguiente. Vamos escribir el comando psql y luego enter. Welcome to psql 8.1.11, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres=# Ahora ya estando dentro de postgres, voy a crear la base de datos con el siguiente comando: CREATE DATABASE prueba ENCODING UTF8;

Antes de crear la base de datos verifiquen que tipo de ENCODING usa la base de datos de donde sacaron el respaldo ya que si crean la base de datos con diferente encoding al importar la data el respaldo NO va a funcionar, para saber el encoding de la base de datos lo hacen de la siguiente manera:

psql -l

Y les va a mostrar lo siguiente:

sh-3.1$ psql -l List of databases Name | Owner | Encoding

++ data1 | data1 | SQL_ASCII data2 | data2 | SQL_ASCII

postgres | postgres | SQL_ASCII template0 | postgres | SQL_ASCII template1 | postgres | SQL_ASCII

El ENCODING de todas las bases de datos en este ejemplo es SQL_ASCII. luego nos salimos de la consola de postgres con el siguiente comando: \q y presionamos enter. Ya estando de vuela en la consola de sistema, ejecutaremos el siguiente comando: psql prueba < prueba.schema.sql Con este comando importaremos el schema en la nueva base de datos. Ahora con el siguiente comando importaremos toda la data: pg_restore -a -v -e -Fc -O disable-triggers -d prueba prueba.data.dump Con este comando insertaremos toda la data en la nueva base de datos.

Recomendaciones:

En este ejemplo sacamos el respaldo con el usuario postgres, recomiendo sacar el respaldo e importar la base de datos con el usuario propietario de la base de datos. Ya que si insertamos la base de datos en otro server cone l usuario postres, al momento de poner a funcionar el respaldo van a haber problemas con los permisos del usuario, ya que el usuario de la base de datos en el anterior server es juan, el usuario en el respaldo va a ser postgres. Felicitaciones, ha echo un respaldo y ha restaurado una base de datos de postgreSQL, sin perder nada de informacin me imagino que hay muchas maneras de realizar esto, pero compart con ustedes la manera como yo hago los respaldos, cualquier comentario o sugerencia es bienvenida.

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 habamos visto cmo hacer un backup en Postgresql, y tambin, cmohacerlo de manera automtica. 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 contrasea del usuario que vamos a usar. Para conocer los parmetros que podemos pasarle al comando, nada mejor que darse una vuelta por la documentacin oficial, ya que hay algn que otro detalle que estara bueno conocer (y adems, porque es buena prctica leer la documentacin oficial). Sobre los parmetros del ejemplo, paso a detallarlos.

-i le indica que ignore la versin (entre el comando y la base de datos). -h localhost es el host de nuestro PostgreSql. -p 5432 es la indicacin del puerto donde corre el servicio. -U postgres especifica que se usar el usuario postgres para la operacin. -d mibase es para que realize la restauracin 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 recomendacin para los que estn empezando a conocerse con PostgreSql, es suscribirse a la lista de correo en espaol. Es bastante activa, y tiene integrantes ante los cuales hay que sacarse el sombrero, tanto por el conocimiento como por la colaboracin que brindan.

Restaurar un backup plano en PostgreSql


En los posts previos sobre temas referentes a backups en PostgreSql, vimos un caso en el cual, en lugar de realizar el backup generando un dump comprimido, lo hacamos en formato plano (en particular, el post hablaba sobre hacer un backup de slo algunas tablas de una base de datos). Ahora bien, cmo hacemos para volver a introducir esos datos?. Simplemente basta con ejecutar este comando:
psql -U usuario -d basededatos -h host -f archivoplano.sql

Automticamente se nos pedir la contrasea


Password for user usuario:

Una vez ingresada, nuestros datos pasarn a insertarse en PostgreSql.

Backup de bases de datos en PostgreSql


Un tema, para nada olvidable, es el de los backups. Lo siguiente, es la descripcin de cmo podemos lograr un dump nuestro PostgreSql desde la lnea de comandos.
pg_dump -i -h localhost -p 5432 -U postgres -F c -b -v -f "/home/damian/backups/mibase.backup" mibase

Ahora bien, empezemos a ver qu estamos haciendo y con que nos estamos encontrando. En primer lugar, cuando querramos ejecutar este comando, nos va a pedir la contrasea para el usuario con el cual lo estamos queriendo ejecutar (usuario postgres en este caso). Entonces, ingresamos la contrasea, Enter, y comienza el proceso. Prestemos atencin al comando completo:
pg_dump -i -h localhost -p 5432 -U postgres -F c -b -v -f "/home/damian/backups/mibase.backup" mibase

Veamos qu significan cada uno de los parametros que estamos indicando.

pg_dump es el comando en si mismo. -i le indica que ignore la versin (entre el comando y la base de datos). -h localhost especifica el host del motor de base de datos (localhost en este caso). -p 5432 es la indicacin del puerto donde corre el servicio. -U postgres es para indicarle que usaremos el usuario postgres. -F indica el formato de salida. c es la eleccin del formato (comprime en este caso). -b indica que vuelque los LO (large objects). -v verbose. -f es el archivo de salida. /home/damian/backups/mibase.backup es el nombre para el archivo de salida (con path). mibase es el nombre de la base a backupear.

De mas est aclarar, que siempre debemos recurrir a la fuente, as que nada mejor que visitar la documentacin oficial. A manera de yapa, si en lugar de utilizar Linux, aplicamos el ejemplo en Windows, habr que hacerle los siguientes arreglos al comando:

C:\Archivos de programa\PostgreSQL\8.3\bin\pg_dump.exe -i -h localhost -p 5432 -U postgr "C:\mibase.backup" mibase

Ntese que fue necesario indicar el path completo al binario.

You might also like