pg_dump – pg_restore (PostgreSQL)
Cuando se trabaja con base de datos, uno de las cosas más importantes de hacer es respaldar los datos en caso de que ocurra cualquier situación que dañe nuestro servidor de base de datos. De nada nos serviría hacer esos respaldos si no los podemos volver a cargar (restaurar) cuando lo necesitemos.
En este post, trataremos la forma de hacer respaldos y restauración de datos cuando se utiliza postgreSQL como DBMS.
Respaldando los datos: pg_dump
pg_dump es una herramienta de línea de comandos que nos permita hacer un respaldo de alguna de las bases de datos (o todas) en nuestro servidor postgres. Permite hacer el volcado de datos en diferentes formatos ya sean compresos, texto plano, etc. En resumen, escribe en un archivo (o salida estándar) las instrucciones SQL necesarias para hacer un respaldo de la base de datos.
-C o –create: Escribe las instrucciones para la creación de la base de datos dentro del script del respaldo.
-f <archivo> o –file=<archivo>: Escriba la salida (el volcado) en el archivo especificado. En caso de que no se utilice esta opción, el volcado se hace a la salida estándar.
-F <formato_de_archivo> o –format=<formato_de_archivo>: Permite especificar el formato de la salida del dump. El formato de salida puede ser:
p o plain: Texto plano.
c o custom: Formato de salida customizable. Este tipo de salida siempre se realiza compreso por defecto.
t o tar: Crea la salida en formato tar.
-n <nombre_esquema> o –schema=<nombre_esquema>: Realiza el dumpúnicamente del esquema (y todos los objetos que contengan) que concuerde con el<nombre_esquema>. Si no se especifica, se hará un dump de todos los esquemas que no sean del sistema y que estén en la base destino. Si se quiere incluir en el dump más de un esquema se pueden poner multiples -n <nombre_esquema> como sean necesarios.
-N <nombre_esquema> o –exclude-schema=<nombre_esquema>: Omite los esquemas que concuerden con <nombre_esquema> del dump a realizarse. Se pueden incluir tantos -N como sean necesarios.
-s o –schema-only: Hace un volcado únicamente del esquema, no de los datos.
-t <nombre_tabla> o –table=<nombre_tabla>: Hace un volcado solo de las tablas que se especifiquen. Se pueden utilizar -t <nombre_tabla> tantas veces como se necesite. Se debe tener en cuenta que pg_dump no hace un seguimiento de las tablas de las que pueda depender la tabla que se desee volcar con el dump, así que hay que tener cuidado de incluirlas todas las que sean necesarias (que tengan relación con llaves primarias o foráneas) para garantizar que se puede hacer la restauración de los datos exitosamente.
-T <nombre_tabla> o — exclude-table: <nombre_tabla>: Excluye del dumplas tablas listadas. Esta opción puede ser utilizada más de una vez.
— inserts: Utiliza inserts en lugar de copy en las instrucciones de SQL.
— port = <puerto>: Especifica el puerto TCP o local en el cual el servidor está escuchando.
-U <nombre_de_usuario>: Especifica el nombre de usuario con el que se hará la conexión a la base de datos que se desea respaldar.
Para hacer el volcado en un archivo de extensión personalizada (opción -F y c para custom):
Para volcar solo una tabla de la base:
Restaurando los datos: pg_restore
Para realizar la restauración de los datos volcados con pg_dump, podemos utilizar la herramienta pg_restore. pg_restore restaura una base de datos que ha sido respaldada con pg_dump.
Entre las ventajas de utilizar esta utilidad para la restauración es que se puede seleccionar qué partes del respaldo se quieren restaurar o incluso reordenar los items antes de hacer la restauración
La sintáxis del comando es la siguiente:
Entre las opciones más comunes utilizadas con este comando están:
-a o –data-only: Restaura solo los datos, no el esquema.
-c o –clean: Elimina los objetos antes de volverlos a crear.
-C o –create: Crea la base de datos especificada con la opción -d, sin embargo, los datos son restaurados a la base de datos que aparece en el script.
-d <nombre_base> o –dbname=<nombre_base>: Conecta a la base de datos<nombre_base> y restaura los datos directamente en ella.
-j <numero> o –jobs=<numero>: Realiza la restauración de los datos utilizando<numero> hilos o procesos (dependiendo del sistema operativo). Cada jobs es un proceso o hilo que utiliza una conexión separada. La utlización de esta opción, permite poder restaurar un dump en una forma más rápida, sin embargo, utiliza más recursos en el servidor. La velocidad de la restauración, por tanto, depende en gran medida de la configuración del hardware del servidor.
-n <nombre_esquema> o –schema=<nombre_esquema>: Realiza la restauración únicamente del esquema llamado <nombre_esquema>.
-s o –schema-only: Restura solo el esquema, no los datos.
-t <nombre_tabla> o –table=<nombre_tabla>: Restaura únicamente la tabla con el nombre <nombre_tabla>. <nombre_tabla> puede ser una expresión regular.
-U <nombre_usuario> o –username=<nombre_usuario>: Nombre de usuario con el que se desea hacer la conexión.
Uno de las cosas a tomar en cuenta a la hora de restaurar un respaldo es que si éste ha sido hecho en un formato particular (custom), no podrá ser visible con herramientas como more,cat o algún editor de texto.
Otros ejemplos: