Realizar y restaurar el backup de una base de datos PostgreSQL usando terminal

Standard

PostgreSQL logo

Qué tal. En el post de hoy veremos cómo realizar un dumpbackup de una (o varias) bases de datos PostgreSQL y restaurarlo de manera práctica, utilizando terminal.

De la documentación de PostgreSQL en su versión 9.5:

“La idea detrás del método dump es generar un archivo con comandos SQL que, al ser usado como feed back en el servidor, recreará la base de datos en el mismo estado en el que estaba en el momento del dump. PostgreSQL provee el programa pg_dump para este propósito.”

pg_dump es una aplicación regular cliente. Esto quiere decir que es posible realizar el procedimiento de backup desde cualquier host remoto que tenga acceso a la base de datos que se desee respaldar. Es importante mencionar que pg_dump no opera con permisos especiales, por lo tanto este debe tener acceso de lectura a todas las tablas que sea necesario respaldar. Con la finalidad de realizar un backup de la base de datos completa, la mayoría de las veces es necesario ejecutarlo como un superusuario de la base de datos.

Una ventaja notable de pg_dump sobre otros métodos de respaldo es que la salida de pg_dump generalmente puede ser recargada en nuevas versiones de PostgreSQL. pg_dump es también el único método que funcionará al transferir una base de datos a otra máquina con diferente arquitectura, como el ir de un servidor de 32-bits a uno de 64-bits.

Y bien, yendo al grano, en esencia este es el uso práctico de pg_dump:

Crear backup:  $ pg_dump -U {user-name} -d {source_db} > {dumpfilename.sql}

Restaurar:     $ psql -U {user-name} -d {desintation_db} < {dumpfilename.sql}

O en su defecto:

Crear Backup:  $ pg_dump -U {user-name} -d {source_db} -f {dumpfilename.sql}

Restaurar:     $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}

*Nótese que para restaurar el dump en la base de datos destino se utiliza psql y no pg_dump.

*También es importante tener en cuenta que si no se especifica una ruta o directorio, el archivo resultante al hacer el backup se guardará en el directorio en el que se encuentre el usuario al momento de utilizar el comando.

Con esas dos líneas es suficiente para crear el respaldo de una base de datos PostgreSQL y restaurarla en nuestra base de datos destino. Quizá algunos se preguntarán: ¿eso es todo? Y bueno, en teoría lo es.

Pero para que no muera tan rápido el interés, a continuación veremos algunos ejemplos bastante útiles que también es posible realizar con esta aplicación, además de lo básico indispensable que acabamos de ver.

Respaldo.

1. Respaldar solo una base de datos PostgreSQL.

$ pg_dump -U user_name -d db_name -f only_database.sql

2. Respaldar todas las bases de datos en PostgreSQL.

$ pg_dumpall > all_db.sql

Los roles y el resto de configuraciones pertenecen a la base de datos PostgreSQL, por lo tanto, con pg_dumpall se realiza un respaldo completo tanto de roles como de configuraciones también.

3. Respaldar una tabla PostgreSQL en específico.

$ pg_dump --table table_name -U user_name -d db_name -f only_table.sql

Para respaldar una tabla específica, se usa la opción – -table TABLENAME en el comando pg_dump. En el caso de que haya tablas con nombres iguales en diferentes esquemas, es posible usar la opción – -schema SCHEMANAME.

Restauración.

4. Restaurar una base de datos PostgreSQL.

$ psql -U user_name -d db_name -f only_database.sql

*Al restaurar es posible que se muestren algunos de los siguientes errores, pero pueden ser ignorados sin que causen mayor problema:

psql:mydb.sql:13: ERROR:  must be owner of schema public
psql:mydb.sql:34: ERROR:  must be member of role "hunabsys"
psql:mydb.sql:59: WARNING:  no privileges could be revoked
psql:mydb.sql:60: WARNING:  no privileges could be revoked
psql:mydb.sql:61: WARNING:  no privileges were granted
psql:mydb.sql:62: WARNING:  no privileges were granted

 5. Restaurar todas las bases de datos PostgreSQL.

$ su postgres
$ psql -f all_db.sql

*Es necesario ejecutar este comando como superusuario PostgreSQL.

6. Restaurar una tabla PostgreSQL en específico.

$ psql -f only_table.sql -d db_name

Ambos.

7. Respaldar una base de datos local y restaurarla a un servidor remoto usando un solo comando.

$ pg_dump -d db_name | psql -h host_name -d db_name

Referencias:

Leave a Reply

Your email address will not be published. Required fields are marked *