Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Postgres导入文件,其中的列由新行分隔_Mysql_Database_Postgresql - Fatal编程技术网

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

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'

我有一个大的文本文件,每行有一列,我想把这个数据文件导入Postgres

我有一个工作的MySQL脚本

 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嗯,对。阅读整个答案。有什么建议吗