So migrieren Sie die Datenbank von Postgres nach MySQL?

Ich konvertieren möchte einige Tabellen aus einer Postgres-Datenbank auf MySQL. Idealerweise würde ich gerne ein Skript zum konvertieren der Tabellen für PG zu MySQL, aber ich bin froh, wenn wir in der Lage sind, um herauszufinden, wie es möglich zu machen, in einem nicht-scripts.

Erste von allen, ich habe einen ähnlichen Beitrag hier: Migrieren Sie die Datenbank von Postgres nach MySQL

Habe ich versucht, sowohl die vorgeschlagenen Lösungen gibt es, aber Sie haben nicht den trick.

Es ist wichtig zu sagen, dass ich migrieren möchten, die Struktur und die Daten.

Aber first things first, hier der SQL-dump von postgres-Datenbank:

--
-- PostgreSQL database dump
--

SET statement_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = off; SET check_function_bodies = false; SET client_min_messages = warning; SET escape_string_warning = off;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: grupos; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
--

CREATE TABLE grupos (
    "dirGrupo" text,
    valor real,
    "flagIntelli" boolean DEFAULT false,
    "flagQDS" boolean DEFAULT false,
    finalidad text,
    "idGrupo" integer DEFAULT nextval('"idGrupo"'::regclass) NOT NULL,
    "claseDomo" text,
    instalado boolean DEFAULT true NOT NULL,
    "codCasa" "char",
    "codUnidad" integer,
    protocolo text NOT NULL,
    escritura boolean,
    dispositivo text,
    "tipoDatos" oid,
    "coordX" integer DEFAULT (-1),
    "coordY" integer DEFAULT (-1),
    mapa text,
    "reglasAsociadas" text );


ALTER TABLE public.grupos OWNER TO postgres;

--
-- Data for Name: grupos; Type: TABLE DATA; Schema: public; Owner: postgres
--

INSERT INTO grupos VALUES (NULL, 0, false, false, 'sensor', 10, 'LightSensor', true, 'E', 1, 'x10', false, 'SensorLum1', 7, -1, -1, NULL, NULL); INSERT INTO grupos VALUES (NULL, 0, false, false, 'luz', 11, 'SimpleLamp', true, 'K', 1, 'x10', true, 'Luz4', 1, -1, -1, NULL, NULL); INSERT INTO grupos VALUES (NULL, 0, false, false, 'Radiador de la sala', 298, 'Heater', true, 'B', 1, 'x10', true, 'RadiadorX10', 1, 163, 168, 'Sala Quercus', '108;111;115;117;119;123;127;131;134;136;138;140;144;148;150;152;155;157;159;162;166;169;172;176;179;182;185;188;190;193;196;199;201;205;209;214;218;222;226;230;234;238;250;254;260;264;277;278;279;280;284;293;297;301;305;309;313;315;315;315;315;315;315;315;315;315;315;315;315;315;315;315;315;'); INSERT INTO grupos VALUES ('0/0/5', 1, false, false, 'Interruptor', 213, 'Button', true, NULL, NULL, 'knx', true, 'Interruptor', 1, 301, 326, 'Plano Casa', NULL); INSERT INTO grupos VALUES ('0/0/4', 0, false, false, 'Enchufe4', 316, 'Switch', true, NULL, NULL, 'knx', true, 'Enchufe4', 1, 303, 133, 'Plano Casa', '268;272;276;'); INSERT INTO grupos VALUES ('0/0/2', 0, false, false, 'Enchufe2', 210, 'Switch', true, NULL, NULL, 'knx', true, 'Enchufe2', 1, 141, 322, 'Plano Casa', NULL); INSERT INTO grupos VALUES ('0/0/1', 0, false, false, 'LuzFlexo', 217, 'SimpleLamp', true, NULL, NULL, 'knx', true, 'LuzFlexo', 1, 80, 45, 'Plano Casa', '267;271;275;'); INSERT INTO grupos VALUES ('0/0/3', 1, false, false, 'Router', 221, 'Router', true, NULL, NULL, 'knx', true, 'Router1', 1, 467, 439, 'Plano Casa', NULL); INSERT INTO grupos VALUES ('0/0/6', 21.68, false, false, 'SensorTemperatura', 237, 'TemperatureSensor', true, NULL, NULL, 'knx', false, 'SensorTemperatura', 2, 146, 436, 'Plano Casa', NULL); INSERT INTO grupos VALUES (NULL, 0, false, false, 'SensorX10', 219, 'MotionSensor', true, 'A', 1, 'x10', false, 'SensorX10', 6, 362, 11, 'Plano Casa', '335;336;'); INSERT INTO grupos VALUES ('1/1/5', 1, false, false, '', 12, 'MotionSensor', true, NULL, NULL, 'knx', false, 'SensorPresencia', 6, -1, -1, NULL, NULL); INSERT INTO grupos VALUES ('1/1/2', 50, false, true, 'Luz Intervalo', 248, 'DimmableLight', true, NULL, NULL, 'knx', true, 'LuzHInt', 3, 97, 276, 'Plano Casa', '265;269;273;338;'); INSERT INTO grupos VALUES ('1/1/1', 0, false, false, 'LuzHBin', 215, 'SimpleLamp', true, NULL, NULL, 'knx', true, 'LuzHBin', 1, 357, 189, 'Plano Casa', '266;270;274;'); INSERT INTO grupos VALUES (NULL, 1, false, true, 'Encender la luz del flexo', 291, 'SimpleLamp', true, 'C', 1, 'x10', true, 'BombillaX10', 1, 272, 130, 'Sala Quercus', '107;109;110;112;113;114;116;118;120;121;122;124;125;126;128;129;130;132;133;135;137;139;141;142;143;145;146;147;149;151;153;154;156;158;160;161;163;164;165;167;168;170;171;173;174;175;177;178;180;181;183;184;186;187;189;191;192;194;195;197;198;200;202;203;204;206;207;208;210;211;212;213;215;216;217;219;220;221;223;224;225;227;228;229;231;232;233;235;236;237;239;240;249;251;252;253;255;256;257;258;259;261;262;263;281;282;283;290;291;292;294;295;296;298;299;300;302;303;304;306;307;308;310;311;312;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;335;336;');


--
-- Name: grupos_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres; Tablespace: 
--

ALTER TABLE ONLY grupos
    ADD CONSTRAINT grupos_pkey PRIMARY KEY ("idGrupo");


--
-- Name: grupos_tipoDatos_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres
--

ALTER TABLE ONLY grupos
    ADD CONSTRAINT "grupos_tipoDatos_fkey" FOREIGN KEY ("tipoDatos") REFERENCES "TiposDatos"(id);


--
-- PostgreSQL database dump complete
--

1) der Erste Ansatz, Mit pG2Mysql: http://www.lightbox.ca/pg2mysql.php
Einfach und schnell (in der Theorie): es hat Leider mehrere Fehler beim Parsen:

Hier ist das Dokument abgerufen:

# Converted with pg2mysql-1.9
# Converted on Mon, 22 Apr 2013 14:12:28 -0400
# Lightbox Technologies Inc. http://www.lightbox.ca

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone="+00:00";

CREATE TABLE grupos (
    `dirGrupo` text,
    valor real,
    `flagIntelli` bool DEFAULT 0,
    `flagQDS` bool DEFAULT 0,
    finalidad text,
    `idGrupo` int(11) auto_increment NOT NULL,
    `claseDomo` text,
    instalado bool DEFAULT 1 NOT NULL,
    `codCasa` `char`,
    `codUnidad` int(11),
    protocolo text NOT NULL,
    escritura bool,
    dispositivo text,
    `tipoDatos` oid,
    `coordX` int(11) DEFAULT -1 ,
    `coordY` int(11) DEFAULT -1 ,
    mapa text,
    `reglasAsociadas` text , PRIMARY KEY(`idGrupo`) ) TYPE=MyISAM;

INSERT INTO grupos VALUES (NULL, 0, false, false, 'sensor', 10, 'LightSensor', true, 'E', 1, 'x10', false, 'SensorLum1', 7, -1, -1, NULL, NULL); INSERT INTO grupos VALUES (NULL, 0, false, false, 'luz', 11, 'SimpleLamp', true, 'K', 1, 'x10', true, 'Luz4', 1, -1, -1, NULL, NULL); INSERT INTO grupos VALUES (NULL, 0, false, false, 'Radiador de la sala', 298, 'Heater', true, 'B', 1, 'x10', true, 'RadiadorX10', 1, 163, 168, 'Sala Quercus', '108;111;115;117;119;123;127;131;134;136;138;140;144;148;150;152;155;157;159;162;166;169;172;176;179;182;185;188;190;193;196;199;201;205;209;214;218;222;226;230;234;238;250;254;260;264;277;278;279;280;284;293;297;301;305;309;313;315;315;315;315;315;315;315;315;315;315;315;315;315;315;315;315;'); INSERT INTO grupos VALUES ('0/0/5', 1, false, false, 'Interruptor', 213, 'Button', true, NULL, NULL, 'knx', true, 'Interruptor', 1, 301, 326, 'Plano Casa', NULL); INSERT INTO grupos VALUES ('0/0/4', 0, false, false, 'Enchufe4', 316, 'Switch', true, NULL, NULL, 'knx', true, 'Enchufe4', 1, 303, 133, 'Plano Casa', '268;272;276;'); INSERT INTO grupos VALUES ('0/0/2', 0, false, false, 'Enchufe2', 210, 'Switch', true, NULL, NULL, 'knx', true, 'Enchufe2', 1, 141, 322, 'Plano Casa', NULL); INSERT INTO grupos VALUES ('0/0/1', 0, false, false, 'LuzFlexo', 217, 'SimpleLamp', true, NULL, NULL, 'knx', true, 'LuzFlexo', 1, 80, 45, 'Plano Casa', '267;271;275;'); INSERT INTO grupos VALUES ('0/0/3', 1, false, false, 'Router', 221, 'Router', true, NULL, NULL, 'knx', true, 'Router1', 1, 467, 439, 'Plano Casa', NULL); INSERT INTO grupos VALUES ('0/0/6', 21.68, false, false, 'SensorTemperatura', 237, 'TemperatureSensor', true, NULL, NULL, 'knx', false, 'SensorTemperatura', 2, 146, 436, 'Plano Casa', NULL); INSERT INTO grupos VALUES (NULL, 0, false, false, 'SensorX10', 219, 'MotionSensor', true, 'A', 1, 'x10', false, 'SensorX10', 6, 362, 11, 'Plano Casa', '335;336;'); INSERT INTO grupos VALUES ('1/1/5', 1, false, false, '', 12, 'MotionSensor', true, NULL, NULL, 'knx', false, 'SensorPresencia', 6, -1, -1, NULL, NULL); INSERT INTO grupos VALUES ('1/1/2', 50, false, true, 'Luz Intervalo', 248, 'DimmableLight', true, NULL, NULL, 'knx', true, 'LuzHInt', 3, 97, 276, 'Plano Casa', '265;269;273;338;'); INSERT INTO grupos VALUES ('1/1/1', 0, false, false, 'LuzHBin', 215, 'SimpleLamp', true, NULL, NULL, 'knx', true, 'LuzHBin', 1, 357, 189, 'Plano Casa', '266;270;274;'); INSERT INTO grupos VALUES (NULL, 1, false, true, 'Encender la luz del flexo', 291, 'SimpleLamp', true, 'C', 1, 'x10', true, 'BombillaX10', 1, 272, 130, 'Sala Quercus', '107;109;110;112;113;114;116;118;120;121;122;124;125;126;128;129;130;132;133;135;137;139;141;142;143;145;146;147;149;151;153;154;156;158;160;161;163;164;165;167;168;170;171;173;174;175;177;178;180;181;183;184;186;187;189;191;192;194;195;197;198;200;202;203;204;206;207;208;210;211;212;213;215;216;217;219;220;221;223;224;225;227;228;229;231;232;233;235;236;237;239;240;249;251;252;253;255;256;257;258;259;261;262;263;281;282;283;290;291;292;294;295;296;298;299;300;302;303;304;306;307;308;310;311;312;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;314;316;317;335;336;'); ALTER TABLE grupos
    ADD CONSTRAINT grupos_pkey PRIMARY KEY ("idGrupo");

Wenn ich diese Datei importieren, um die Datenbank mit einer Datenbank-Manager, ich erhalte nichts, aber Fehler:

So migrieren Sie die Datenbank von Postgres nach MySQL?

Für einige Grund der parser markiert chars zwischen diesen Symbolen: ".
Wenn wir genau hinschauen, manchmal sind die Namen der Spalten zwischen " und ein anderes mal nicht, warum?

Lösche ich diese Symbole rund um char und gehen, das gleiche zu tun importieren Sie wieder, aber wieder ein anderer Fehler stellt sich:

So migrieren Sie die Datenbank von Postgres nach MySQL?

Typ oid? was ist das? Lesen sehe ich, dass ist ein Typ, für den primär-Schlüssel.

2) der Zweite Ansatz, ich werde versuchen, mit Mysql Workbench:

Installierte ich dieses feature in Ubuntu und ich habe es ausprobiert. Es gibt eine option zum migrieren von Datenbanken, toll!

1.- Ich Stelle die Quelle und testen Sie die Verbindung:

So migrieren Sie die Datenbank von Postgres nach MySQL?

2.- Dann das Ziel und testen Sie die Verbindung:

So migrieren Sie die Datenbank von Postgres nach MySQL?

3.- Der nächste Bildschirm ist alles ok:

So migrieren Sie die Datenbank von Postgres nach MySQL?

4.- Nun bin ich aufgefordert, wählen Sie das Schema, ich wählen Sie die Standard-option:

So migrieren Sie die Datenbank von Postgres nach MySQL?

5.- Und ich bekomme die folgende Fehlermeldung, andernfalls in dem Punkt namens "Reverse Engineering ausgewählte schemata".

Starting...
Connect to source DBMS...
- Connecting...
Connecting to postgresql@DRIVER=Postgresql;SERVER=158.49.245.68;PORT=5432...
Opening ODBC connection to DRIVER=Postgresql;SERVER=158.49.245.68;PORT=5432;DATABASE=QDSDatabase;UID=postgres...
Connected
Connect to source DBMS done
Reverse engineer selected schemata....
Reverse engineering public from QDSDatabase
- Reverse engineering catalog information
Traceback (most recent call last):
  File "/usr/lib/mysql-workbench/modules/db_postgresql_re_grt.py", line 335, in reverseEngineer
    return PostgresqlReverseEngineering.reverseEngineer(connection, catalog_name, schemata_list, context)
  File "/usr/lib/mysql-workbench/modules/db_generic_re_grt.py", line 207, in reverseEngineer
    catalog = cls.reverseEngineerCatalog(connection, catalog_name)
  File "/usr/lib/mysql-workbench/modules/db_generic_re_grt.py", line 367, in reverseEngineerCatalog
    cls.reverseEngineerSequences(connection, schema)
  File "/usr/lib/mysql-workbench/modules/db_postgresql_re_grt.py", line 76, in reverseEngineerSequences
    min_value, max_value, start_value, increment_by, last_value, is_cycled, ncache = cls.execute_query(connection, seq_details_query % (schema.name, seq_name)).fetchone()
  File "/usr/lib/mysql-workbench/modules/db_generic_re_grt.py", line 56, in execute_query
    return cls.get_connection(connection_object).cursor().execute(query, *args, **kwargs)
pyodbc.ProgrammingError: ('42P01', '[42P01] ERROR: no existe la relaci\xc3\xb3n \xc2\xabpublic.idtipodatos\xc2\xbb;\nError while executing the query (7) (SQLExecDirectW)')

Traceback (most recent call last):
  File "/usr/share/mysql-workbench/libraries/workbench/wizard_progress_page_widget.py", line 192, in thread_work
    self.func()
  File "/usr/lib/mysql-workbench/modules/migration_schema_selection.py", line 160, in task_reveng
    self.main.plan.migrationSource.reverseEngineer()
  File "/usr/lib/mysql-workbench/modules/migration.py", line 332, in reverseEngineer
    self.state.sourceCatalog = self._rev_eng_module.reverseEngineer(self.connection, self.selectedCatalogName, self.selectedSchemataNames, self.state.applicationData)
SystemError: ProgrammingError("('42P01', '[42P01] ERROR: no existe la relaci\xc3\xb3n \xc2\xabpublic.idtipodatos\xc2\xbb;\nError while executing the query (7) (SQLExecDirectW)')"): error calling Python module function DbPostgresqlRE.reverseEngineer
ERROR: Reverse engineer selected schemata: ProgrammingError("('42P01', '[42P01] ERROR: no existe la relaci\xc3\xb3n \xc2\xabpublic.idtipodatos\xc2\xbb;\nError while executing the query (7) (SQLExecDirectW)')"): error calling Python module function DbPostgresqlRE.reverseEngineer
Failed

6.- Wenn ich versuche mit anderen Typ des schemas (PUNKT 4.-) schließt das Programm plötzlich :

So migrieren Sie die Datenbank von Postgres nach MySQL?

So, ich habe versucht, diese auf verschiedene Weise mit Mysql-Workbench, die schien Super, aber leider nichts geklappt.

Irgendwelche Ideen? Denken Sie daran, dass die postgres-SQL ist in den Anfang der post, so kann jeder versuchen, die migration.

  • Nun, das ist eine nette Geschichte, aber die Lösungen sind bereits gut etabliert: Machen Sie ein schema-dump und dann pro-Tabelle, CSV-dumps. Hand konvertieren Sie das schema und laden Sie es in MySQL importieren Sie dann die Daten in jeder Tabelle. Wenn Sie nicht möchten, dass der Ansatz, den Sie verwenden können, ETL-Werkzeugen wie Pentaho Kettle oder Talend Studio zu tun, der Daten-migration. Schema-Konvertierung-tools sind ebenfalls vorhanden, aber in der Regel Kosten $. Die eine Sache, die absolut garantiert nicht funktionieren, ist es, einfach einen dump der DB und versuchen, laden Sie es in MySQL.
  • Ja, ich wollte nur vermeiden, das Schema der Konvertierung von hand. Als Richar Huxton kommentierte ich verstehe wirklich nicht, PostgreSQL & MySQL tief genug, um es richtig zu machen. Aber ehrlich gesagt, ich denke ich habe keine andere chance, als zu versuchen es.
  • Nicht beantworten kann, da dieser geschlossen ist, aber Sie sollten lernen, SQL erste. Wenn Sie nicht möchten, versuchen Sie eine der anderen automatischen tools: wiki.postgresql.org/wiki/... oder versuchen Sie es Pentaho Kettle.
InformationsquelleAutor Jesus | 2013-04-24
Schreibe einen Kommentar