migrar datos de mysql a postgresql

migrar datos de mysql a postgresql

de mauricio sanchez castro -
Número de respuestas: 2

si muy buenas comunidad moodle tengo el siguiente problema en mi organización queremos migrar toda la información del moodle que esta en base de datos mysql a base de datos postgresql no se si me podrian ayudar o si alguien ya ha hecho esto de verdad que es urgente comunidad moodle espero que me pueda ayudar muchas gracias

Promedio de valoraciones: -
En respuesta a mauricio sanchez castro

Re: migrar datos de mysql a postgresql

de Martín Maglianesi -

Hola Mauricio. Te pego algo de lo que documenté cuando atravesé por ese proceso. TSTI es referencia a la organización en la que trabajo (Tecnicatura Superior en Sistemas de Información). Espero que te sirva. No es para que lo hagas paso a paso pero tenés una guía de la herramienta utilizada y las órdenes que se ejecutaron para volcar los datos de MySQL y recrearlos en PostgreSQL. Suerte!

 

Migración BD MySQL a Postgresql

Migración exitosa (variante utilizada en Marzo/2010)

Se utilizó el script mysql2pgsql.perl. Se debe realizar un dump de la BD MySQL con sólo los datos (se asume que se instaló Moodle con una BD Postgres limpia). Con relación a la estructura, tan sólo aquellas tablas que hayan sido extendidas, creadas por la TSTI o por algún otro módulo/bloque agregado a Moodle.

Tablas Extendidas o Creadas por la TSTI

  • mdl_role_assignment_historial (creada)

  • mdl_course_correlativas (creada)
  • mdl_user (extendida)
  • mdl_user_estado_historial (creada)
  • mdl_cuotas (creada)
  • mdl_cuotas_parametros (creada)
  • mdl_user_preinscriptos (creada)

Tablas Generadas por Bloques Agregados

  • mdl_sharing_cart
  • mdl_unittest_grade_categories
  • mdl_unittest_grade_categories_history
  • mdl_unittest_grade_grades
  • mdl_unittest_grade_items
  • mdl_unittest_grade_items_history
  • mdl_unittest_grade_outcomes
  • mdl_unittest_scale

Guía paso a paso para el dump de los datos, la estructura extendida/creada de la TSTI, copia de un Servidor a otro, conversión de sintaxis y población de la BD Postgres

Referencias: Upgrading to 1.6 and may need to switch to PostgreSQL, Servers, RAID, failover, etc.

  • TSTI2009:~/backup/moodle# mysqldump -u root -p --databases moodle --compatible=postgresql --no-create-db --skip-add-drop-table --skip-triggers --skip-comments --skip-compact --skip-extended-insert --skip-add-locks --skip-disable-keys --no-create-info --default-character-set=utf8 > moodle_data_mysqldump.sql (dump de los datos en BD Mysql)

 

  • TSTI2009:~/backup/moodle# mysqldump -h localhost -u root -p"****" --compact --no-data moodle mdl_role_assignment_historial mdl_course_correlativas mdl_user_estado_historial mdl_cuotas mdl_cuotas_parametros mdl_user_preinscriptos mdl_sharing_cart mdl_unittest_grade_categories mdl_unittest_grade_categories_history mdl_unittest_grade_grades mdl_unittest_grade_items mdl_unittest_grade_items_history mdl_unittest_grade_outcomes mdl_unittest_scale > moodle_extended_structure_TSTI.mysqldump.sql > moodle_extended_structure_TSTI.mysqldump.sql (Creación de tablas propias de la TSTI a partir de las existentes)

 

  • Añadir las siguientes líneas al final del archivo moodle_extended_structure_TSTI.mysqldump.sql (tabla moodle extendida por la TSTI)
ALTER TABLE mdl_user ADD COLUMN provincia varchar(70);
ALTER TABLE mdl_user ADD COLUMN codpostal bigint;
ALTER TABLE mdl_user ADD COLUMN dni varchar(9) NOT NULL;
ALTER TABLE mdl_role_assignments ADD COLUMN estado int  NOT NULL;
ALTER TABLE mdl_role_assignments ADD COLUMN timeestado date;
 
  • TSTI2010:~/backups# ./mysql2pgsql.perl moodle_extended_structure_TSTI.mysqldump.sql moodle_extended_structure_TSTI.pg.sql (convierte sintaxis MySQL a Postgresql)
  • TSTI2010:~/backups# ./mysql2pgsql.perl moodle_data_mysqldump.sql moodle_data.pg.sql (convierte sintaxis MySQL a Postgresql)
  • tsti:/home/admintsti/migracion# ./mysql2pgsql.perl moodle_data_mysqldump.sql moodle_data.pg.sql
    Complex regular subexpression recursion limit (32766) exceeded at ./mysql2pgsql.perl line 860, <IN> line 143.
    ...
    Complex regular subexpression recursion limit (32766) exceeded at ./mysql2pgsql.perl line 860, <IN> line 15881.
    tsti:/home/admintsti/migracion#
  • Vaciar todas las tablas de la BD Moodle en Postgres (inicializar secuencias) (se utilizó phpPgAdmin. Las secuencias fueron inicializadas automáticamente al vaciar las tablas)
  • POST-CONVERSION
    ----------------
    (analizar impacto de las acciones a realizar)
    Eliminar línea DROP TABLE "if" (no modificar número de líneas del archivo)
    Reemplazar algunas líneas que quedaron como INSERT INTO `...` por INSERT INTO "...." (ninguna al 3/3/2010)
    Reemplazar algunas líneas que quedaron como ',' por ',E' (son dos al 3/3/2010)


  • TSTI2010:~/backups# psql (accede a la consola de Postgres)
  • postgres=# \set ON_ERROR_STOP on
    postgres=# \o /tmp/postgres-logs.txt
    postgres=# \c moodle_new (el nombre de la BD Moodle totalmente vacía)
    psql (8.4.1)
    Ahora está conectado a la base de datos «moodle_new».
    moodle_new=# \i moodle_extended_structure_TSTI.pg.sql (extiende estructura de datos en BD Postgres; ejecutarlo 2 veces porque la primera da errores porque hay tablas que aun no fueron creadas por el script)
    Se omite la salida por ser larga e innecesaria; igualmente controlarla
    moodle_new=# BEGIN; (inicia transacción)
    moodle_new=# \i moodle_data.pg.sql (importa los datos)
    moodle_new=# COMMIT;
    moodle_new=# \q

 

  • postgres@tsti:/home/admintsti$ PGPASSWORD=**** psql -qAt -U postgres -c "\ds" moodle | cut -d '|' -sf 2 | sed "s/^\(\(.*\)_id_seq\)$/SELECT setval\('\1', \(SELECT MAX\(id\) FROM \2\), true\);/" | PGPASSWORD=**** psql -U postgres moodle (Resetea las Secuencias a sus valores apropiados)