我有一个大的文本文件,每行有一个列,我想将这个数据文件导入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'然而,它抱怨说:
错误:复制分隔符必须是一个单字节字符。
发布于 2013-08-23 08:39:23
直接的错误是因为\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。
发布于 2014-09-16 17:24:32
虽然postgresql不会识别\n作为字段分隔符,但最初的问题是如何将行导入为单个列,这可以在postgresql中通过定义数据字符串中找不到的分隔符来实现。例如:
COPY tablename
FROM '/Users/Farmor/data.sql'
WITH DELIMITER '~';如果该行中没有找到~,postgresql将将整个行视为一个列。
发布于 2013-08-23 04:35:23
分隔符是两个字符,因此它是一个有效的错误消息。
我认为最简单的方法是修改您要从其中导入的文件,并将分隔符实际更改为\n以外的其他内容,但在您的情况下,这可能不是一个选项。
这个问题解决了同样的问题:ERROR: COPY delimiter must be a single one-byte character
https://stackoverflow.com/questions/18394620
复制相似问题