हैलो, मैं कुछ टेबल को पोस्टग्रेज़ डेटाबेस से MySQL में कनवर्ट करना चाहता हूं। आदर्श रूप में मैं एक ऐसी स्क्रिप्ट बनाना चाहूंगा जो पीजी के लिए माईएसक्यूएल में टेबल को कन्वर्ट करेगी, लेकिन मुझे खुशी है कि अगर हम यह समझने में सक्षम हैं कि इसे एक पठनीय तरीके से कैसे संभव बनाया जाए।पोस्टग्रेज़ से MySQL तक डेटाबेस माइग्रेट कैसे करें?
सबसे पहले, मैं एक ऐसी ही पोस्ट यहाँ पढ़ लिया है: Migrate database from Postgres to MySQL
मैं कोशिश की है दोनों समाधान वहाँ प्रस्तावित है, लेकिन वे चाल बनाने नहीं समझे।
यह कहना महत्वपूर्ण है कि मैं संरचना और डेटा माइग्रेट करना चाहता हूं।
--
-- 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 का उपयोग करना::
लेकिन सबसे पहली बात, यहां postgres-डेटाबेस के एसक्यूएल डंप है 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.- अगर मैं स्कीमा (सूत्री 4.) कार्यक्रम अचानक बंद कर देता है किसी अन्य तरह के प्रयास करें:
बस इतना ही, मैं MySQL कार्यक्षेत्र, साथ में कई तरह से यह कोशिश की है जो बहुत अच्छा लग रहा था, लेकिन दुर्भाग्य से कुछ भी काम नहीं किया।
कोई विचार? याद रखें कि पोस्टग्रेस एसक्यूएल पोस्ट की शुरुआत में है, इसलिए कोई भी माइग्रेशन का प्रयास कर सकता है। प्राप्त किसी भी मदद के लिए मैं बेहद आभारी रहूंगा।
जेसुस रेडोंडो।
अच्छा, यह एक अच्छी कहानी है, लेकिन समाधान पहले से ही अच्छी तरह से स्थापित हैं: एक स्कीमा डंप करें और फिर प्रति-तालिका डंप को सीएसवी पर करें। हाथ स्कीमा को परिवर्तित करें और इसे MySQL में लोड करें, फिर प्रत्येक तालिका में डेटा आयात करें। यदि आपको वह दृष्टिकोण पसंद नहीं है तो आप डेटा माइग्रेशन करने के लिए पेंटाहो केटल या टैलेंड स्टूडियो जैसे ईटीएल उपकरण का उपयोग कर सकते हैं। स्कीमा रूपांतरण उपकरण भी मौजूद हैं, लेकिन आमतौर पर लागत $। एक बात ** पूरी तरह से काम नहीं करने की गारंटी ** ** डीबी को डंप करना और इसे MySQL में लोड करने का प्रयास करना है। –
हां, मैं बस हाथ से स्कीमा रूपांतरण से बचना चाहता था। जैसा कि रिचर ह्यूस्टन ने टिप्पणी की थी कि मैं वास्तव में पोस्टग्रेएसक्यूएल और माईएसक्यूएल को सही तरीके से करने के लिए पर्याप्त गहराई से समझ नहीं पा रहा हूं। लेकिन ईमानदारी से मुझे लगता है कि मेरे पास अन्य मौका नहीं है लेकिन इसे आजमाएं। – Jesus
यह बंद नहीं होने के कारण उत्तर नहीं दे सकता है, लेकिन आपको पहले एसक्यूएल सीखना चाहिए। यदि आप नहीं चाहते हैं, तो अन्य स्वचालित टूल में से किसी एक को आज़माएं: https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQL या कोशिश करें [पेंटाहो केटल] (http://community.pentaho.com/projects/ डेटा एकीकरण/)। – Chloe