Mysql Postgres导入文件,其中的列由新行分隔
我有一个大的文本文件,每行有一列,我想把这个数据文件导入Postgres 我有一个工作的MySQL脚本Mysql Postgres导入文件,其中的列由新行分隔,mysql,database,postgresql,Mysql,Database,Postgresql,我有一个大的文本文件,每行有一列,我想把这个数据文件导入Postgres 我有一个工作的MySQL脚本 LOAD DATA LOCAL INFILE '/Users/Farmor/data.sql' INTO TABLE tablename COLUMNS TERMINATED BY '\n'; 我怎样才能把它翻译成博士后?我试过其他命令 COPY tablename FROM '/Users/Farmor/data.sql'
LOAD DATA LOCAL
INFILE '/Users/Farmor/data.sql'
INTO TABLE tablename
COLUMNS TERMINATED BY '\n';
我怎样才能把它翻译成博士后?我试过其他命令
COPY tablename
FROM '/Users/Farmor/data.sql'
WITH DELIMITER '\n'
但它抱怨说:
错误:复制分隔符必须是单个单字节字符
您的分隔符是两个字符,因此它是一条有效的错误消息 我认为最简单的方法是修改您从中导入的文件,并实际将分隔符更改为
\n
以外的内容,但在您的情况下,这可能不是一个选项
这一问题涉及同样的问题:
直接错误是因为
\n
只是一个双字符字符串,\
和n
你想要:
COPY tablename
FROM '/Users/Farmor/data.sql'
WITH DELIMITER E'\n'
E'
语法是PostgreSQL扩展
不过,它仍然无法工作,因为PostgreSQL的COPY
无法理解带有换行列分隔符的文件。我从未见过这种格式
您需要使用其他工具加载它并转换CSV。使用office套件,Python的
csv
模块,Perl的Text::csv
模块,或者其他任何东西。然后将清理后的CSV馈送到PostgreSQL中。虽然PostgreSQL无法识别\n作为字段分隔符,但最初的问题是如何将行作为单个列导入,这可以在PostgreSQL中通过定义在数据字符串中找不到的分隔符来实现。例如:
COPY tablename
FROM '/Users/Farmor/data.sql'
WITH DELIMITER '~';
如果行中未找到~,postgresql将把整行视为一列。
'\n'
是一个两个字符的字符串(取决于字符串设置和postgresql版本),您需要说E'\n'
以获得换行符。但这可能会导致“复制分隔符不能是换行符或回车符”错误,因为如果列和行使用相同的分隔符,PostgreSQL将无法区分它们之间的差异。我猜您将不得不将数据文件压缩到其他布局中(甚至可能将其加载到MySQL,然后从MySQL转储到SQL或CSV)。我将采用转储方法或编写一个perl脚本。奇怪的是,Postgres无法理解,一个10列的表每隔10行就会有一个新行。请回答您的评论,以便我可以接受。任何指针、建议COPY语句都会引发错误:COPY分隔符不能是换行符或回车符return@user637338嗯,对。阅读整个答案。有什么建议吗