2

我有一个大文本文件,每行有一列,我想将此数据文件导入 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 分隔符必须是单个单字节字符

4

3 回答 3

2

直接错误是因为\n只是一个两个字符的字符串,\并且n.

你要:

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

E''语法是 PostgreSQL 扩展。

但是,它仍然不起作用,因为 PostgreSQLCOPY无法理解带有换行符列分隔符的文件。我什至从未见过这种格式。

您需要使用其他工具加载它并转换 CSV。使用办公套件、csvPython 模块、Text::CSVPerl 模块或其他任何东西。然后将清理后的 CSV 输入 PostgreSQL。

于 2013-08-23T08:39:23.083 回答
2

While postgresql will not recognize \n as a field delimiter, the original question asked how to import a row as a single column and this can be accomplished in postgresql by defining a delimiter not found in the data string. For example:

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

If no ~ is found in the row, postgresql will treat the entire row as one column.

于 2014-09-16T17:24:32.547 回答
1

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

我相信最简单的方法是修改您从中导入的文件,并将分隔符实际更改为其他内容,\n但在您的情况下这可能不是一个选项。

这个问题解决了同样的问题: 错误:复制分隔符必须是单个单字节字符

于 2013-08-23T04:35:23.353 回答