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