cover
Copiar los datos de una base de datos PostgreSQL a otra alojadas en diferentes contenedores docker
image profile
Raúl Cobiellas
16 Apr 2024
Tecnologíadockerpostgresql

Tenemos dos instancias de postgresql corriendo en contenedores diferentes en nuestro sistema .El nombre del primer contenedor es basededatos-1 y el segundo es basededatos-2 al cual importaremos los datos de basededatos-1.

basededatos-1 posee un conjunto de base de datos con diferentes tipo de contenidos y el contenedor basededatos-2 está completamente vacío.

1- Exportar todos los datos almacenados en el contenedor basededatos-1.

Lo primero que haremos será entrar a la terminal bash del contenedor usando este comando.

1docker exec -it basededatos-1 bash

Luego exportamos todos los datos con el siguiente comando especificando el usuario establecido y el puerto si estamos usando uno diferente al que hay por defecto por ejemplo yo estoy usando el puerto 1458.

1pg_dumpall -U usuario -p 1458 > backup.sql

Esto nos crea un archivo llamado backup.sql con todos los datos guardados en el contenedor basededatos-1 si ejecutamos el comando ls obtendremos algo como esto

1backup.sql etc opt srv 2home proc sys 3bin lib root tmp 4dev media run usr 5docker-entrypoint-initdb.d mnt sbin var

Para terminar con el trabajo en basededatos-1 nos salimos de su terminal bash con el comando

exit
.

2- Mover el archivo backup.sql para el contenedor basededatos-2

Ahora vamos a copiar el archivo backup.sql que contiene todos los datos exportados de basededatos-1 al contenedor basededatos-2.Para esto usamos los siguientes comandos en la terminal.

Primero copiamos el archivo backup.sql a una ruta en nuestro sistema de archivos, yo por ejemplo lo pondré en mi carpeta de usuario.

1docker cp basededatos-1:/backup.sql /home/raul

Y luego copiamos el mismo archivo para el contenedor basededatos-2.

1docker cp /home/raul/backup.sql basededatos-2:/

Y para finalizar este paso entramos a la terminal de nuestro contenedor basededatos-2 para comprobar que se encuentre el archivo backup.sql ejecutando nuevamente el comando

ls
.

1docker exec -it basededatos-2 bash

3- Importamos todos los datos en basededatos-2 desde el archivo backup.sql.

Como en basededatos-2 estoy usando el puerto

1468
tengo que especificarlo. Usamos este comando para importar todas las bases de datos con su respectivo contenido.

1psql -U usuario -p 1468 -f backup.sql

Una vez terminado podemos comprobar que todo se realizó con éxito comprobando la lista de base de datos con el siguiente comando.

1psql -U usuario -p 1468 -l