Saltar al contenido principal

GUI-DGT-005 Guía de clonado de bases de datos en PostgreSQL

v 2.0

Objetivo

Esta guía busca enseñar el clonar bases de datos de Postgres para facilitar el desarrollo y las pruebas entre los desarrolladores del equipo.

Notas introductorias

PostgreSQL es un motor de bases de datos relacionales, sencillo de usar para manejar datos y utlizado en el equipo de desarrollo.

Procedimiento

Instalar PostgreSQL

Windows

Para poder instalar PostgreSQL en Windows, dirígite a la página de descarga del instalador y utiliza esta guía para usar el instalador.

Finalmente, si seguiste la guía deberías poder ejecutar el siguiente comando:

psql -U postgres

El comando pedirá la contraseña que usaste durante la instalación. Deberías de ver tu prompt cambiar a postgres=#.

MacOS

Para instalar postgres en MacOS, puedes usar homebrew. Si no tienes hombrew, puedes descargarlo aquí.
Una vez que tengas hombrew, puedes correr el siguiente comando:

brew install postgresql

Despues de su instalación deberás activar el servidor de postgres, esto se puede hacer con el siguiente comando:

brew services start postgresql

Para verificar tu instalación, deberías de poder hacer:

psql postgres

Si tu prompt cambia a postgres=#, tu instalación ha tenido éxito.

Ubuntu

Para instalar postgres en Ubuntu, basta con correr el siguiente comando:

apt install postgresql

Para revisar si ha tenido éxito, corre el siguiente comando:

psql postgres

Si tu prompt cambia a postgres=#, tu instalación ha tenido éxito.

Clonar base de datos

Composición de un URI de Postgres

Para entender los pasos siguientes, hay que entender un poco como funcionan los identificadores de las bases de datos de postgres. Tienen la siguiente estructura:

postgresql://user:password@host:port/db_name?schema=public

Dónde:

  • postgresql://: Es el indicador de que se trata de una base de datos de postgres.
  • user: es el usuario con el cual se va a conectar a la base de datos. Este parámetro se puede omitir si se va a usar el usuario default del sistema.
  • password: es la contraseña con la que se va a conectar a la base de datos. Si tu base de datos no tiene contraseña, este parámetro se puede omitir.
  • host: es la ip donde está hosteada la base de datos. Puede ser localhost si está alojada localmente.
  • port: es el puerto donde está hosteada la base de datos. El default es 5432.
  • db_name: es el nombre de la base de datos a la que te quieres conectar

Entender este link es fundamental para obtener información que será necesaria en los pasos siguientes.

Clonar base de datos

Para clonar la base de datos se hace uso del comando pg_dump. Ésta es una herramienta que proporciona postgres para generar respaldos de la base de datos. En su forma más simple, se usa así en la terminal:

pg_dump <db_name>

Para que el comando sea realmente útil, existen varias flags que se le pueden agregar:

  • -a: Copiar solo los datos de la DB, es decir, no se crean las tablas, se asume que la db destino ya tiene la estructura deseada. Útil si se cuenta con un ORM (ej. Prisma).
  • -s: Este comando es lo contrario a -a, es decir, solo copia la estructura de la db, sin ningún dato.
  • -h: Especifica el host al que se va a conectar. Si se omite se asume localhost.
  • -U: Especifica el usuario con el que se va a conectar a la base de datos. Si se omite se asume el usuario local. Si se agrega la flag pero no se especifica valor se asume postgres.
  • -C: Este comando agrega al backup las instrucciones necesarias para crear la base de datos en el destino. Es decir, incluye un comando SQL CREATE DATABASE.

Si luego encademos este comando con una pipe o una inserción podemos generar herramientas útiles. Por ejemplo:

# Genera un archivo SQL con la estructura y los datos de la base de datos
pg_dump db > backup.sql

# Ejecuta un archivo SQL sobre una base de datos local
psql db < backup.sql

# Pasa únicamente los datos de db a db2
pg_dump -a db | psql db2

# Crea la base de datos remota en tu máquina local
pg_dump -C -h <remoteHost> db | psql postgres

# Copia solo los datos de una base de datos remota
# a tu base de datos local usando un usuario diferente al default
pg_dump -a -h <remoteHost> -U <remoteUser> db | psql -U <localUser> db

Estos son solo algunos ejemplos de lo que se puede hacer con este comando. Puedes ajustar el comando con las flags que se adapten mejor a tu necesidad.

Control de cambios

VersiónCambio realizadoAnálisisAutorRevisor(es)Fecha de cambio
v 1.0Creación de la guíaN/ARicardo Fernández24/04/2024
v 1.1Corrección de errores ortográficosSe corrigieron errores ortográficos en el documentoDiego Sandoval28/04/2024
v 1.2Actualizar VersiónNACarlos VelascoDavid Langarica30/04/2024
v 2.0Mejorar explicación de clonaciónSe obtuvo retro del entedimiento de la guía y se aplicó el feedbackRicardo Fernández01/05/2024