简体   繁体   English

从MySQL csv导出导入PostgreSQL csv?

[英]PostgreSQL csv import from a MySQL csv export?

Will it work? 它会起作用吗?

MySQL export: MySQL导出:

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

PostgreSQL: PostgreSQL的:

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

There is missing columns for some reason. 由于某种原因缺少列。 So I believe there is problem in delimiter. 所以我相信分隔符存在问题。 Am I correct, what can I do? 我纠正了,我该怎么办? I can inspect row with cause error below. 我可以检查以下原因错误的行。 But which characters I must look for? 但我必须寻找哪些角色?

ERROR:  missing data for column "Column21"
CONTEXT:  COPY table, line 88219: ...
  1. As mentioned by @knitti postgres need to know escape character: ESCAPE '\\' 正如@knitti提到的postgres需要知道转义字符:ESCAPE'\\'
  2. OPTIONALLY ENCLOSED BY '"' is bad format for csv. It's better to force quoting. 选择性地封装'''是csv的不良格式。最好强制引用。

Full code: 完整代码:

mysql 5.5.15: 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: postgres 9.0.3:

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

Default quote character in PostgreSQL is double-quote, but the documentation says, you can use any single one-byte-character. PostgreSQL中的默认引号字符是双引号,但文档说,您可以使用任何单个单字节字符。 Try adding 尝试添加

ESCAPE '\\'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM