Re: Migrar de MySQL a PostgreSQL

From: Gilberto Castillo Martínez <gilberto(dot)castillo(at)etecsa(dot)cu>
To: joseantonioarce(at)gmail(dot)com
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Migrar de MySQL a PostgreSQL
Date: 2009-01-22 15:55:42
Message-ID: 1232639742.6495.16.camel@gilbertoc
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El jue, 22-01-2009 a las 09:40 -0600, Jose Antonio Arce escribió:
> Saludos, espero que esten bien.
>
> Podrían recomendarme una herramienta para migrar mi base de datos mysql
> 5.0.22 a PostgreSQL 8.3.5

Migración de Mysql server para PostgreSQL
Encontramos varios formas:

Primera forma: utilizar la script "mysql2pgsql.perl"

A considerar:

* No se migra estructura de un atributo con comentarios.
* Los atributos no deben tener caracteres raros Ej.ñ.

Descargar la scipt y salvar con el mysql2pgsql.perl:

mysql2pgsql.perl

Pasos para utilizarla:

* Sacar el backup de la estructura de base de datos en Mysql.
mysqldump --database --table --no-data > mysql_.sql
* Convertir para que PostgreSql lo pueda cargar.
perl mysql2pgsql.perl mysql_.sql postgres_.sql --nodrop
* La opción --nodrop elimina las eliminaciones de las
tablas, si se quiere ver mas opciones --help.
su postgres
createdb NombreDB
psql -f postgres_.sql -u dad NombreDB
* Para los datos. Exportar de MySql solo datos con la
opción de --complete-insert y -c.

Segunda forma:

El Gestor gráfico de bases de datos en mysql, phpmyadmin permite
exportar backups con compatibilidad para varios gestores de bases de datos
entre ellos Postgres. Se restaura de la forma anterior.

Tercer forma:

Utilizando ambos motores al mismo tiempo:

Temporalmente, se estableció una conexión con dbi-link. La documentación
es más o menos sencilla, sólo hay que retocar el script que corresponda
a mysql.

Los pasos:

1. crear el lenguaje plperl para la BD:

create language plperlu;

2. lanzas dbi_link.sql ( te crea el esquema y las funciones necesarias).

psql < dbi_link.sql

3. Conectar con la BD.

psql < mysql.sql
* Vale decir, que los datos no se están copiando, sino que
se ven como en tiempo de replicación.

Esto lo logré con algo de ayuda, además de la documentación, de parte
del amigo seyko, que se puede ver en
http://www.forosdelweb.com/f21/reporte-almacen-con-datos-postgresql-mysql-536140/#post2201060.

Prueba de funcionamiento:

SELECT dbi_link.make_accessor_functions(
'dbi:mysql:database=sir;host=localhost',
'root',
,
'---
AutoCommit: 1
RaiseError: 1
',
NULL,
NULL,
NULL,
'sir'
);

En MySQL

mysqldump database -uusername -p --no-data > tables.sql;
create table foo (
id int not null auto_increment primary key,
state enum('enabled', 'disabled')
);

En PostgreSQL

create table foo (
id int not null primary key default nextval('foo_id_seq'),
state varchar(8) check (state in ('enabled', 'disabled'))
);
create sequence foo_id_seq;
select setval('foo_id_seq', (select max(id) from foo));
>
> Gracias,
>
> Jose Arce
> Costa Rica
> --
> TIP 7: no olvides aumentar la configuración del "free space map"
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel R. Bercián 2009-01-22 17:44:21 Re: Pasar una tabla (de una base de datos postgres) a una hoja de calculo (con exel o openoffice)
Previous Message Gonzalo Fernández 2009-01-22 15:46:28 Re: Migrar de MySQL a PostgreSQL