Pueden ser varios los motivos por los que necesitemos exportar nuestra base de datos: Mantener respaldos, migrar a otro servidor, cargarla en local para ejecutar pruebas peligrosas, etc.

Para poder ejecutar estas operaciones es necesario tener conocimiento de algunas herramientas que trae PostgreSQL. Probablemente has intentado hacerlo desde algún cliente como DBeaver, pero por lo general los clientes de BD no son muy buenos ejecutando estas tareas.

Por esta razón, la mejor forma de volcar una base de datos siempre será utilizando las herramientas oficiales que nos provee cada motor. En esta entrada vamos a ver como usar estas herramientas para exportar una base de datos PostgreSQL de un servidor e importarla en otro.

Obtener herramientas

Si estamos en Debian/Ubuntu, necesitaremos instalar el siguiente paquete:

sudo apt install postgresql-client-common postgresql-client-13

Si estás en Windows, lo vas a encontrar en el paquete de instalación de PostgreSQL para Windows.

Exportar base de datos

Para generar un dump de una base de datos, PostgreSQL nos provee la utilidad pg_dump.

El siguiente es el comando base para extraer una base de datos de postgres:

pg_dump -h <host> -p <port> -U <user> <database> -n <schema> > <output>

A continuación un ejemplo:

pg_dump -h 127.0.0.1 -p 5411 -U pguser pgdb -n public > dump.sql

Resumen de parámetros:

-h: Host/IP

-p: Puerto, por defecto 5432

-U: Usuario

-n: Schema. Si se omite los toma todos. Puedes especificar varios schemas utilizando varias veces este modificador (ej: -n public -n public2).

La base de datos (pgdb) no necesita ser especificada mediante un modificador.

La salida de este comando la redirigimos a un archivo usando >.

La clave del usuario nos la pedirá una vez ejecutemos el comando.

Importar dump en otro servidor

Ahora que ya tenemos nuestro volcado en el archivo dump.sql, lo cargaremos en otra base de datos.

Para esto utilizaremos el cliente de linea de comandos de postgres psql:

psql -h 127.0.0.1 -p 5412 -U pguser -d pgdb -f dump.sql

El output de este comando debería verse algo parecido a esto:

felipe@nitrov:~$ psql -h 127.0.0.1 -p 5412 -U pguser -d pgdb -f dump.sql
Password for user pguser: 
SET
SET
SET
SET
SET
 set_config 
------------
 
(1 row)

SET
SET
SET
SET
psql:dump.sql:23: ERROR:  schema "public" already exists
ALTER SCHEMA
COMMENT
SET
CREATE TABLE
ALTER TABLE
COPY 4

El error schema “public” already exists se debe a que el volcado que generamos en el primer paso contenía la instrucción para crear el schema public, pero en la base de datos destino este schema ya estaba creado. Esto no es problema ya que psql continuará ejecutando el resto del SQL, creando las tablas e insertando los registros por completar.

Conclusión

Para realizar operaciones de volcado e importación de bases de datos postgres siempre es mejor utilizar las herramientas oficiales. En los ejemplo vimos casos básicos, pero si revisas la documentación encontrarás opciones para cubrir casos mas complejos y dar más flexibilidad por si quieres incluir estas operaciones como parte de otro proceso.

Documentación: