Migrar datos Postgre SQL

Hola a tod@s

PostgreSQL es un sistema o motor de bases de datos compatible con los servicios de OVHcloud y la mayoría de las herramientas más populares del mercado. Es compatible con diversos modelos de datos para crear aplicaciones orientadas a objetos, potentes y escalables.

En este post quiero dejar «la nota» de la migración de datos de una Base de datos Postgres a otra bbdd.

La forma más simple con la que me he encontrado para hacer el backup y restaurar la bbdd es con pg_dump, que es una herramienta de línea de comandos proporcionada por PostgreSQL para realizar copias de seguridad de una base de datos.

Asegurate de tener permisos necesarios.

Para comprobar si tenemos instalada la herramienta pg_dump con el comando:

pg_dump --version

Si no tenemos instalada la herramienta puedes hacerlo de estas formas:

  • En Linux: Dependiendo de la distribución, utilizarás apt (para distribuciones basadas en Debian como Ubuntu), yum (para distribuciones basadas en Red Hat como CentOS), o dnf (para distribuciones más recientes de Fedora). Por ejemplo, en Ubuntu, usarías:
    sudo apt-get update sudo apt-get install postgresql
  • En macOS: Puedes usar Homebrew para instalar PostgreSQL:
    brew update brew install postgresql
  • En Windows

En Windows, puedes descargar el instalador desde la página oficial de PostgreSQL:

  1. Ve a PostgreSQL: Windows installers .
  2. Descarga el instalador para Windows.
  3. Sigue las instrucciones del instalador.

Crear la Copia de Seguridad con pg_dump

Utilizamos pg_dump para crear la copia de seguridad. Por ejemplo:

pg_dump -h direccionhost -U username -W nombrebbdd > dbbackup.sql
  • -h direccionhost: url o ip del host de la bbdd.
  • -U username: Es el nombre de usuario.
  • -W: Solicitará la contraseña.
  • nombrebbdd: Es el nombre de la base de datos.
  • dbbackup.sql: Es el archivo de salida.

Seguidamente nos preguntará la contraseña para guardar los datos.

Restaurar la Copia de Seguridad con psql

Utilizamos psql para restaurar la copia de seguridad. Por ejemplo:

psql -h direccionhost -U username -d nombrebbdd -f dbbackup.sql
  • -h direccionhost: url o ip del host de la bbdd.
  • -U username: Es el nombre de usuario.
  • -d nombrebbdd: Es el nombre de la base de datos.
  • -f dbbackup.sql: Es el archivo de salida.

Seguidamente nos preguntará la contraseña para subir los datos.


Copias con los datos de las tablas:

Crear la Copia de Seguridad junto con todos los datos con pg_dump

Utilizamos pg_dump para crear la copia de seguridad. Por ejemplo:

pg_dump -h direccionhost -U username -W -F c -b -v -f "./archivo_para_guardar.dmp" nombrebbdd
  • -h direccionhost: url o ip del host de la bbdd.
  • -U username: Nombre de usuario.
  • -W: Solicitará la contraseña.
  • -F c:Esta opción especifica el formato del archivo de salida. La c significa un archivo de formato «custom», que es un formato comprimido y más eficiente para backups grandes. Este formato es también más flexible para restauraciones selectivas.
  • -b: Incluye los objetos grandes (LOBs) en el dump. Esto es útil si tu base de datos contiene datos binarios grandes almacenados en campos blob.
  • -v: Activa el modo verboso, que proporciona detalles adicionales sobre el proceso de dump mientras se ejecuta. Esto es útil para diagnosticar problemas o para entender más acerca de qué está haciendo el comando.
  • -f "./archivo_backup.dmp": Ruta y archivo de salida.
  • nombrebbdd: Nombre de la base de datos.

Seguidamente nos preguntará la contraseña para guardar los datos.

Restaurar la Copia de Seguridad con pg_restore

Utilizamos pg_restore para restaurar la copia de seguridad:

pg_restore -h direccionhost -U username -d nombrebbdd -c -O -x -v "./archivo_backup.dmp"
  • -h direccionhost: url o ip del host de la bbdd.
  • -U username: Es el nombre de usuario.
  • -d nombrebbdd: Es el nombre de la base de datos.
  • -c: Esta opción es para limpiar (dropear) las bases de datos antes de restaurarlas. Básicamente, eliminará objetos existentes que tengan los mismos nombres que los objetos en el backup antes de realizar la restauración.
  • -O: Omite (no restaura) los identificadores de propiedad en los objetos restaurados. Esto es útil si estás restaurando datos en una base de datos donde el usuario propietario podría ser diferente del especificado en el backup.
  • -x: Evita la restauración de los privilegios (ACLs). Usar esta opción asegura que no se intentará restaurar ningún dato de configuración de seguridad con el backup.
  • -v: Modo verboso. Muestra detalles adicionales sobre el proceso de restauración, lo cual es útil para diagnósticos o simplemente para más información sobre lo que pg_restore está haciendo.
  • -f dbbackup.sql: Es el archivo de salida.

Seguidamente nos preguntará la contraseña.

Y si tenemos que importar en otro esquema ¿?

Utilizamos el comando para mover a otro esquema:

ALTER TABLE esquema_actual.nombre_tabla SET SCHEMA esquema_deseado;

Y con esto ya tendremos los datos migrados!

Espero que os sirva de ayuda.

Salu2

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Warning: Undefined array key "rerror" in /volume1/web/WebTomoNota/wp-content/plugins/wp-recaptcha-bp/recaptcha.php on line 300 Call Stack: 0.0001 360952 1. {main}() /volume1/web/WebTomoNota/index.php:0 0.0001 361264 2. require('/volume1/web/WebTomoNota/wp-blog-header.php') /volume1/web/WebTomoNota/index.php:17 0.4470 14466032 3. require_once('/volume1/web/WebTomoNota/wp-includes/template-loader.php') /volume1/web/WebTomoNota/wp-blog-header.php:19 0.4566 14632200 4. include('/volume1/web/WebTomoNota/wp-content/themes/yuki/index.php') /volume1/web/WebTomoNota/wp-includes/template-loader.php:106 2.5881 17441136 5. yuki_do_elementor_location($elementor_location = 'single', $template_part = 'template-parts/special', $name = 'single') /volume1/web/WebTomoNota/wp-content/themes/yuki/index.php:20 2.5881 17441136 6. get_template_part($slug = 'template-parts/special', $name = 'single', $args = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/helpers.php:34 2.5881 17441712 7. locate_template($template_names = [0 => 'template-parts/special-single.php', 1 => 'template-parts/special.php'], $load = TRUE, $load_once = FALSE, $args = []) /volume1/web/WebTomoNota/wp-includes/general-template.php:206 2.5881 17441824 8. load_template($_template_file = '/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php', $load_once = FALSE, $args = []) /volume1/web/WebTomoNota/wp-includes/template.php:745 2.5882 17442176 9. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php') /volume1/web/WebTomoNota/wp-includes/template.php:812 2.6434 17448480 10. do_action($hook_name = 'yuki_action_after_single_post') /volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php:58 2.6434 17448856 11. WP_Hook->do_action($args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.6434 17448856 12. WP_Hook->apply_filters($value = '', $args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.7327 17548896 13. yuki_show_post_comments('') /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324 2.7329 17548896 14. comments_template($file = ???, $separate_comments = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/template-functions.php:354 2.7350 17558392 15. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php') /volume1/web/WebTomoNota/wp-includes/comment-template.php:1631 2.7350 17558392 16. comment_form($args = ['class_form' => 'comment-form yuki-form form-default'], $post = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php:66 2.7374 17570112 17. do_action($hook_name = 'comment_form', ...$arg = variadic(1369)) /volume1/web/WebTomoNota/wp-includes/comment-template.php:2896 2.7374 17570488 18. WP_Hook->do_action($args = [0 => 1369]) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.7374 17570488 19. WP_Hook->apply_filters($value = '', $args = [0 => 1369]) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.7375 17571240 20. ReCAPTCHAPlugin->show_recaptcha_in_comments(1369) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324