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 serlocalhost
si está alojada localmente.port
: es el puerto donde está hosteada la base de datos. El default es5432
.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 asumelocalhost
.-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 asumepostgres
.-C
: Este comando agrega al backup las instrucciones necesarias para crear la base de datos en el destino. Es decir, incluye un comando SQLCREATE 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ón | Cambio realizado | Análisis | Autor | Revisor(es) | Fecha de cambio |
---|---|---|---|---|---|
v 1.0 | Creación de la guía | N/A | Ricardo Fernández | 24/04/2024 | |
v 1.1 | Corrección de errores ortográficos | Se corrigieron errores ortográficos en el documento | Diego Sandoval | 28/04/2024 | |
v 1.2 | Actualizar Versión | NA | Carlos Velasco | David Langarica | 30/04/2024 |
v 2.0 | Mejorar explicación de clonación | Se obtuvo retro del entedimiento de la guía y se aplicó el feedback | Ricardo Fernández | 01/05/2024 |