如何将数据库从Postgres迁移到MySQL?
您好,我想将Postgres数据库中的一些表转换为MySQL。理想情况下,我想创建一个将PG表转换为MySQL的脚本,但是如果我们能够弄清楚如何以非脚本化的方式实现它,我很高兴。如何将数据库从Postgres迁移到MySQL?
首先,我在这里读了类似的帖子:Migrate database from Postgres to MySQL
我已经试过这两种解决方案提出了那里,但他们我以前不使的伎俩。
重要的是要说我想迁移结构和数据。第一
但第一件事情,这是Postgres的数据库的SQL转储:
--
-- 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)第一种方法,使用pG2Mysql:http://www.lightbox.ca/pg2mysql.php 简单和快速(理论上):不幸的是,
这里是检索到的文档:
# 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");
在解析时有几个错误
当我使用任何数据库管理器导入此文件到数据库中,我收到什么,但错误:
出于某种原因,解析器标记字符这些符号之间:“”。 如果我们仔细看看,有时候列的名字是在''和其他时间之间,为什么?
我删除周围焦炭这些符号,并继续做同样的进口,但再次另一个错误朝上:
类型OID?那是什么?阅读我看到这是一个用于主键的类型...在这一点上,我决定:
我已经够了!
2)第二种方法,我会尝试与Mysql Workbench:
我安装在Ubuntu这个功能,我给它一个尝试。有一个选项可以迁移数据库,太棒了!
1 .-我介绍了源和测试连接:
2:然后将目的地和测试连接:(!嘿,这sh-- ..thing可能工作:))
3.-下一个画面,一切都很好:
4。 - 现在我要求选择模式,我选择默认选项:
5.-我收到以下错误,在指定的点失败,“反向工程选择的图式”。
Starting...
Connect to source DBMS...
- Connecting...
Connecting to [email protected]=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.-如果我尝试用其他类型的架构(POINT 4.-)程序突然关闭的:
这一切,我已经在几个方面与MySQL工作台,试过这里面看起来很棒,但不幸的是没有工作。
任何想法?请记住,postgres SQL是在文章的开头,所以任何人都可以尝试迁移。我将非常感谢所收到的任何帮助。
JesúsRedondo。
这对你来说恐怕会很困难。
- 你似乎并不理解PostgreSQL的
- 你似乎并不了解MySQL的
- 你似乎并不理解你的数据库架构
如果这是你的整个架构,只需将其复制到您选择的文本编辑器中并手动更新即可。
什么“oid”列用于我不能说,但它与主键无关(可能是一个大对象或“blob”?)。
引用仅用于已使用混合大小写标识LikeThis的情况。默认情况下,SQL不区分大小写。
Mysql没有真正的“布尔”类型,您可能会想要使用bit
或tinyint
。
模式中的nextval()调用是为了生成唯一的id。这是一个PostgreSQL的东西,在MySQL中不支持 - 你可能需要一个auto_increment修饰符。
这些提示和pg2mysql输出之间应该让你开始。
谢谢,我将尝试解析Schema并将数据从一个数据库传递到另一个数据库以CSV格式进行编写。 我不知道为什么在那里使用oid。我没有设计数据库模式,但恐怕设计师们都不知道:) 感谢您的报价和布尔提示! – Jesus 2013-04-24 16:02:56
@Jesus“oid”是旧的('WITH OIDS')PostgreSQL表中的内部列。它仍然用在系统目录中,但通常没有其他用处。将其用于任何事情的可能性不大,在进行数据迁移时通常可以省略。 “oid”是“对象标识符”。查看PostgreSQL文档了解所有细节。 – 2013-04-24 22:38:12
嗯,这是一个很好的故事,但解决方案已经很完善:做模式转储,然后每个表转储到CSV。手转换架构并将其加载到MySQL中,然后将数据导入到每个表中。如果你不喜欢这种方法,你可以使用Pentaho Kettle或Talend Studio等ETL工具来进行数据迁移。模式转换工具也存在,但通常花费$。一件事**绝对保证不工作**只是转储数据库并尝试将其加载到MySQL中。 – 2013-04-24 11:26:14
是的,我只是想避免手工转换模式。正如Richar Huxton评论说的,我真的不明白PostgreSQL和MySQL足够深入,无法做到这一点。但老实说,我认为我没有其他机会,只能尝试一下。 – Jesus 2013-04-24 15:41:29
由于此操作已关闭,因此无法回答,但应先学习SQL。如果您不想尝试,请尝试其他自动工具之一:https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQL或尝试[Pentaho Kettle](http://community.pentaho.com/projects/数据集成/)。 – Chloe 2015-09-22 21:37:28