Postgres导入文件,其列由新行分隔

时间:2013-08-23 04:17:50

标签: mysql database postgresql

我有一个大文本文件,每行有一列,我想将此数据文件导入Postgres。

我有一个有效的MySQL脚本。

 LOAD DATA LOCAL 
        INFILE '/Users/Farmor/data.sql' 
        INTO TABLE tablename 
        COLUMNS TERMINATED BY '\n';

如何将其翻译成Postgres?我尝试过其他这个命令。

COPY tablename
    FROM '/Users/Farmor/data.sql' 
    WITH DELIMITER '\n'

然而它抱怨:

  

错误:COPY分隔符必须是单个单字节字符

3 个答案:

答案 0 :(得分:2)

立即错误是因为\n只是一个两个字符串,\n

你想:

COPY tablename
    FROM '/Users/Farmor/data.sql' 
    WITH DELIMITER E'\n'

E''语法是PostgreSQL扩展名。

但它仍然无效,因为PostgreSQL的COPY无法理解带有换行符分隔符的文件。我甚至都没见过那种格式。

您需要使用其他工具加载它并转换CSV。使用办公套件,Python的csv模块,Perl的Text::CSV或其他。然后将已清理的CSV提供给PostgreSQL。

答案 1 :(得分:1)

您的分隔符是两个字符,因此它是一个有效的错误消息。

我认为最简单的方法是修改您要导入的文件,并将分隔符实际更改为\n以外的其他内容,但这可能不适合您的情况。

这个问题解决了同样的问题: ERROR: COPY delimiter must be a single one-byte character

答案 2 :(得分:1)

虽然postgresql不会将\ n识别为字段分隔符,但原始问题询问如何将行作为单个列导入,这可以通过定义数据字符串中未找到的分隔符在postgresql中完成。例如:

COPY tablename
FROM '/Users/Farmor/data.sql' 
WITH DELIMITER '~';

如果行中没有〜,postgresql会将整行视为一列。