2011-09-20 167 views
5

它會工作嗎?PostgreSQL csv從MySQL csv導出導入?

MySQL的出口:

SELECT * INTO OUTFILE 'C:/data.csv' 
FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM table; 

PostgreSQL的:由於某種原因

COPY table FROM 'C:/data.csv' WITH DELIMITER AS '\t' NULL AS '\\N' CSV 

有缺失列。所以我認爲分隔符有問題。我是否正確,我該怎麼辦?我可以檢查下面的原因錯誤的行。但我必須尋找哪些角色? PostgreSQL中

ERROR: missing data for column "Column21" 
CONTEXT: COPY table, line 88219: ... 
+0

因此,在88219線包含有逃脫報價刺: 「... \」 ...「好像Postgres的不能解除引用此。有特別的選擇嗎? – FirstTimePoster

回答

11
  1. 正如@knitti的Postgres提到需要知道轉義字符:ESCAPE '\'
  2. OPTIONALLY ENCLOSED BY '「' 是CSV格式錯誤這是更好地強制引用

全碼:

的MySQL 5.5.15:

SELECT * 
INTO OUTFILE 'C:/data.csv' 
FIELDS TERMINATED BY '\t' ENCLOSED BY '"' ESCAPED BY '\\' 
LINES TERMINATED BY '\n' 
FROM table; 

的Postgres 9.0.3:

COPY table FROM 'C:/data.csv' WITH DELIMITER AS '\t' NULL AS '\\N' ESCAPE E'\\' CSV 
+0

正是我在找我的朋友! –

+0

我需要爲E'\ t'轉義分隔符才能工作 – Zabuzzman

0

默認引號字符是雙引號,但是the documentation說,你可以用任何一個單字節字符。嘗試添加

ESCAPE '\\'