【问题标题】:PostgreSQL csv import from a MySQL csv export?从 MySQL csv 导出导入 PostgreSQL csv?
【发布时间】:2011-09-20 11:33:25
【问题描述】:

它会起作用吗?

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

由于某种原因缺少列。所以我相信分隔符有问题。我是对的,我该怎么办?我可以检查下面有原因错误的行。但是我必须寻找哪些角色?

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

【问题讨论】:

  • 所以在 88219 行包含带有转义引号的 sting:" ... \" ..." 似乎 postgres 无法取消引用这个。是否有特殊选项?

标签: mysql postgresql csv


【解决方案1】:
  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

【讨论】:

  • 正是我要找的朋友!
  • 我需要将分隔符转义为 E'\t' 以便上述工作
【解决方案2】:

PostgreSQL 中的默认引号字符是双引号,但the documentation 说,您可以使用任何单个单字节字符。尝试添加

ESCAPE '\\'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2011-06-04
    • 2010-10-12
    • 1970-01-01
    • 2022-06-17
    • 2015-04-20
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多