2011-09-20 169 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 '\\'