CodeGym /Cursos /SQL SELF /Restaurando datos con pg_restore

Restaurando datos con pg_restore

SQL SELF
Nivel 43, Lección 3
Disponible

Después de que tú, como admin responsable de bases de datos, hayas hecho tu backup, llega el momento de la verdad: la restauración de los datos. Y aquí entra en escena el protagonista de este episodio — el comando pg_restore. Si pg_dump era tu superhéroe para crear backups, pg_restore es su compañero que revive los datos desde esos backups.

pg_restore se usa para restaurar datos desde archivos creados con pg_dump en formatos binarios (custom o directory). Si por alguna razón tu base de datos se dañó, o quieres migrar datos a un nuevo servidor, esta herramienta será tu aliada imprescindible.

¿Por qué necesitas pg_restore?

  • Te permite restaurar toda la base de datos o solo partes de ella (esquema, tablas, datos).
  • Es una herramienta potente para escenarios de restauración complejos donde necesitas controlar el proceso al detalle.

Sintaxis básica del comando

Trabajar con pg_restore empieza con la sintaxis básica del comando:

pg_restore -U nombre_usuario -d nombre_base backup_file.dump

Parámetros del comando:

  • -U nombre_usuario: especifica el usuario de PostgreSQL para conectarse.
  • -d nombre_base: el nombre de la base de datos donde se restaurarán los datos.
  • backup_file.dump: el archivo de backup creado antes con pg_dump en formato custom o directory

Por ejemplo, si quieres restaurar la base de datos university desde el archivo backup.dump como usuario postgres, el comando sería así:

pg_restore -U postgres -d university backup.dump

Al ejecutar este comando, pg_restore inicia el proceso de restauración y ¡devuelve los datos a la base!

Tipos de backups y su compatibilidad

No todos los backups son iguales. Quizá recuerdas que al crear un backup con pg_dump podíamos elegir diferentes formatos. Algunos son compatibles con pg_restore y otros no.

Formato de backup Descripción ¿Soporta pg_restore?
plain (texto) Script SQL que contiene los comandos de restauración. ❌ No
custom Backup comprimido en formato propietario de PostgreSQL. ✅ Sí
directory Backup guardado como un directorio con varios archivos. ✅ Sí
tar Archivo en formato TAR. ✅ Sí

Ojo, para los backups de texto (plain) no puedes usar pg_restore. Esos archivos se restauran manualmente con el comando psql. Por ejemplo:

psql -U nombre_usuario -d nombre_base -f backup.sql

La flexibilidad de pg_restore: parámetros de restauración

Una de las razones principales por las que pg_restore es tan popular es su flexibilidad. Puedes restaurar no solo toda la base, sino también partes concretas.

Restaurar solo la estructura de datos. Si solo quieres restaurar la estructura de la base (esquemas de tablas, índices, triggers, etc.), usa el flag --schema-only:

pg_restore -U postgres -d university --schema-only backup.dump

Esto es útil si quieres analizar la estructura de la base o crear una copia "vacía".

Restaurar solo los datos. Si solo te interesan los datos (sin la estructura), usa el parámetro --data-only:

pg_restore -U postgres -d university --data-only backup.dump

Este enfoque sirve si la estructura ya existe, pero necesitas restaurar el contenido de las tablas.

Limpiar antes de restaurar. A veces las tablas o esquemas ya existen en la base. Para borrarlos antes de restaurar, usa el flag --clean:

pg_restore -U postgres -d university --clean backup.dump

Con este parámetro, pg_restore primero borra los objetos existentes y luego restaura los datos del backup.

Filtrar objetos. pg_restore te deja elegir qué objetos del backup quieres restaurar. Para eso se usa el flag --table:

pg_restore -U postgres -d university --table=students backup.dump

Este ejemplo solo restaurará la tabla students.

Mostrar el SQL en consola

Si quieres ver qué se va a ejecutar durante la restauración, pero no quieres modificar la base todavía, usa el flag --list:

pg_restore -l backup.dump

Y para ver los comandos SQL en texto que se van a ejecutar, añade --verbose:

pg_restore -U postgres --verbose --schema-only backup.dump

Ejemplos de restauración

  1. Restauración completa de la base de datos.

El caso más típico: quieres restaurar toda la base desde el backup:

pg_restore -U postgres -d university backup.dump
  1. Restaurar una tabla concreta.

Por ejemplo, si solo perdiste los datos de la tabla courses, restáurala aparte:

pg_restore -U postgres -d university --table=courses backup.dump
  1. Restaurar el esquema de la base.

Para restaurar solo la estructura de las tablas (sin datos):

pg_restore -U postgres -d university --schema-only backup.dump
  1. Restaurar sobrescribiendo objetos existentes.

Si necesitas sobreescribir los datos existentes:

pg_restore -U postgres -d university --clean backup.dump

Errores típicos al restaurar y cómo evitarlos

  • Incompatibilidad de versiones. Si haces el backup en una versión de PostgreSQL y lo restauras en otra (sobre todo si es más antigua), puedes tener errores de incompatibilidad. Solución: intenta usar la misma versión de PostgreSQL para crear y restaurar los backups.

  • Error "Role does not exist". Si en el backup hay roles (usuarios) que no existen en el servidor de restauración, te saldrá este error. Solución: crea los roles necesarios en el nuevo servidor antes de restaurar.

  • Error "Table already exists". Este error sale si intentas restaurar una tabla que ya existe. Usa --clean para evitar el conflicto.

2
Tarea
SQL SELF, nivel 43, lección 3
Bloqueada
Restaurar datos de solo una tabla
Restaurar datos de solo una tabla
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION