2011-04-06 36 views
0

我有一個表polit_activity用模式爲:轉換PostgreSQL表到MySQL表

CREATE TABLE polit_activity 
(
id serial NOT NULL, 
category_name character varying, 
soi character varying, 
heading character varying, 
description character varying, 
event_loc character varying, 
relloc character varying, 
news_date timestamp with time zone, 
sectors character varying, 
results character varying, 
remarks character varying, 
recovery character varying, 
oth_pers character varying, 
mil_units character varying, 
mil_ops_cdr character varying, 
gp_org_cdr character varying, 
gr character varying 
) 
WITH (
OIDS=FALSE 
); 

現在我想在mysql數據庫相同的數據在同一個表。我試過這些命令:

psql> \o /var/lib/abc.csv 
psql> select * from polit_activity; 

我無法在Mysql中加載該文件。請幫助我以最簡單的方式做到這一點。

請查看附件csv文件

感謝&最好的問候, 阿達什訥夏爾馬

+1

附件丟失!! – Manoj 2011-04-06 10:56:17

+0

問題的實質是什麼,你如何嘗試?任何錯誤消息?你能在MySQL中創建一個完全相同的表嗎? – vbence 2011-04-06 11:33:32

回答

1

最起碼,你需要編輯你的PostgreSQL中提取的SQL文件。 PostgreSQL和MySQL有許多共同的功能,但使用這些功能的方式不同。例如,PostgreSQL和MySQL都支持自動遞增的id號碼,但它們使用不同的保留字和技術來實現這些id號碼。 PostgreSQL在該進程中使用保留字「SERIAL」作爲DDL的一部分; MySQL不。

如果PostgreSQL文件使用MySQL的任何保留字作爲表名或列名,則需要使用反引號來保護它。反引號在PostgreSQL中不合法。

如果我剛一個表格來處理,我可能只是

  • 改寫DDL以符合MySQL的 要求,
  • 使用數據(而不是架構)轉儲到 盤pg_dump,
  • 並將數據讀入到新的MySQL 表中。
+0

Urk - 你不能像SQL標準那樣使用「雙引號」來保護保留字嗎?或者只有MySQL支持反引號? – 2012-07-03 16:16:10

+0

BTW @AdarshSharma,對於單錶轉換,通常更容易使用COPY表名TO/some/server/path或客戶端psql變體'\ copy tablename TO/home/local/path'。可選的'WITH CSV'子句爲您提供了對輸出的大量控制,並且可以使用衆多工具將tab /逗號分隔的數據加載到MySQL表中。從內存來看,它通常比關於'pg_dump --data-only --inserts --table tablename dbname'輸出的方式更簡單快捷,以使MySQL感到開心。 – 2012-07-03 16:20:24

+0

@CraigRinger:只有在更改服務器模式時,纔可以使用雙引號來監視MySQL中的保留字。我不知道MySQL的轉儲是否尊重服務器模式。 – 2012-07-03 18:45:59