Hoy os voy a explicar como exportar e importar un esquema en PostgreSQL o, lo que es lo mismo, realizar un export/import de toda la vida. Antes, un poco de contexto, para entender la operativa.
Me llega una CRQ (o petición de cambio) donde el cliente me solicita hacer un refresco de datos entre el entorno de producción y el de preproducción. Estas acciones suelen realizarse a toda la base de datos completa, por el simple hecho de tener los datos lo más actualizados posibles y que no haya tanta diferencia entre los entornos.
Pero en esta ocasión, lo que solicita es algo «especial»: necesita refrescar un esquema concreto, realizando antes un backup full por si algo se torciera.
¿Vamos con ello?
La primera tarea que vamos a realizar es exportar el esquema solicitado a un fichero .sql mediante la herramienta pg_dump. Esta herramienta se incluye en los binarios de instalación de la BBDD.
[postgres@postgres ~]$ pg_dump -d mibd -F p --schema esquema -f /home/postgres/export_Esquema_`date +%d%m%Y%H%M`.sql
La sentencia es larga, pero paso a detallarte las opciones utilizadas:
-dIndicamos el nombre de la base de datos que vamos a usar, ya que podemos tener varias corriendo dentro del mismo servidor-FAquí especificamos que el formato de salida será un texto plano, de ahí la p--schemaIndicamos el esquema que queremos exportar-fAquí estamos definiendo la ruta y nombre del fichero. Fíjate que combinamos un comando previamente ejecutado (de ahí entrecomillarlo con``), el cual devolverá la fecha y hora actual como parte del nombre de este fichero .sql
Esto nos ha generado en la ruta indicada un fichero .sql con el nombre export_Esquema_041220231000.sql. Fíjate como indica el día y la hora de generación, para así tenerlo bien identificado.
Bien, ahora debemos mover este fichero a la máquina destino. Si tienes conexión entre entornos, es tan sencillo como realizar un SCP. Si no, pues a la vieja usanza: descargas el fichero a tu máquina local para después subirlo. Yo tengo conexión entre máquinas, así que:
[postgres@postgres ~]$ scp export_Esquema_041220231000.sql servidorPRE01:/home/postgres
Ahora, como en la CRQ nos solicitaban un Backup Full previo a la importación, vamos con ello:
[postgres@servidorPRE01 ~]$ pg_dump -d mibdPRE -Cc -F p -f /home/postgres/BackupFullPRE_`date +%d%m%Y%H%M`.sql
Si os fijáis, el comando es muy parecido al anterior, con la variación de que quitamos la opción del esquema y añadimos el parámetro -Cc, donde le indicamos que el fichero .sql se genere con opciones de creación (C) y limpieza (c) de la base de datos. Es decir, va a incluir una sentencia DROP DATABASE y CREATE DATABASE, lo cual va a ayudar a una recreación limpia de la misma.
Una vez tengamos el backup, vamos a borrar manualmente el esquema a recrear para no tener problemas:
psql -d mibdPRE
[local] postgres@mibdPRE =# drop schema esquema cascade;
Por último, lanzamos el import utilizando el fichero .sql que nos trajimos desde el servidor de producción:
nohup psql -d mibdPRE < export_Esquema_041220231000.sql &
Fíjate que he lanzado la operación con el comando de Unix nohup, el cual me envía el proceso a segundo plano. Esto me aporta varias características interesantes, como que puedo cortar la sesión SSH sin miedo a que se cancele la operación o que el log se escriba en un fichero llamado nohup.out (el cual puedo ir monitorizando con un tail).
¡Y listo! Con estos pasos hemos refrescado un esquema específico del entorno de preproducción con datos actualizados del entorno de producción.
¿Qué te ha parecido? Déjame tus impresiones en la caja de comentarios de abajo o comparte la entrada en redes sociales para que más gente conozca el portal y se convierta en un auténtico DBA.
Recuerda que puedes suscribirte a la newsletter de Como ser DBA justo en el pie de página. Solo te mandaremos un correo para avisarte de que hemos publicado una nueva entrada.