Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 PostGreSQL CSV导入行分隔符_Mysql_Postgresql_Csv - Fatal编程技术网

Mysql PostGreSQL CSV导入行分隔符

Mysql PostGreSQL CSV导入行分隔符,mysql,postgresql,csv,Mysql,Postgresql,Csv,我正在尝试从MySQL表导出数据,并将该数据导入PgSQl数据库 从MySQL导出脚本 select column_names from from table_name LIMIT 2 INTO OUTFILE 'E:/CSV_files/record_main.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY ';' PgSQL导入脚本 COPY record_main("column_names ") FRO

我正在尝试从MySQL表导出数据,并将该数据导入PgSQl数据库

从MySQL导出脚本

select column_names from from table_name LIMIT 2
INTO OUTFILE 'E:/CSV_files/record_main.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY ';'
PgSQL导入脚本

COPY record_main("column_names ") FROM 'E:/CSV_files/record_main.csv' 
WITH DELIMITER ',' NULL '\N'   ESCAPE ';' CSV
当我尝试导出和导入CSV时,上面的代码对我来说运行良好

但是,当我将选择限制1增加到2或任意值时,它会导致错误

错误:上一个预期列之后有额外数据 上下文:复制记录,第1行:>“12635”、“55025”、“1”、“ASCS”、“P”、“5320700”、“2015-01-01>00:00:00”、\N\N\N\N\N,“契约”、\N\N\N\N、…“

然后打开CSV文件,我手动将一行数据分隔为两行数据

我从每一行的末尾去掉了分号

这一次效果很好。
我认为行分隔符中有错误。我的问题是,我如何向PgSQl说明行分隔符是这样的。就我所知,正如我给出的分隔符一样,postgresql希望行之间用新行字符分隔:

“复制自”可以处理以换行符、回车符或回车符/换行符结尾的行


因此,您必须调整mysql导出以使用新行字符作为行分隔符,或者需要预处理转储以替换
字符加新行。

据我所知,postgresql希望行之间用新行字符分隔:

“复制自”可以处理以换行符、回车符或回车符/换行符结尾的行

因此,您必须调整mysql导出以使用新行字符作为行分隔符,或者需要预处理转储以替换
带新行的字符。

从您应该用于
复制的语法来看
是:

COPY record_main FROM 'E:/CSV_files/record_main.csv' DELIMITERS ',' CSV;
如您所见,这与您尝试运行的命令不同。但是
COPY
在数据库服务器上运行,需要根帐户。如果没有,也可以尝试使用
\copy

\copy record_main(col1, col2, ...) FROM 'E:/CSV_files/record_main.csv'
    DELIMITER ',' CSV
更新:

@shadow正确地指出,您需要将MySQL数据导出到CSV文件中,该文件的行由行分隔符(而不是分号)分隔。但是您的Postgres copy语法看起来不太正确,所以这个答案可能仍然会对您有所帮助。

从您应该用于
copy
的语法来看:

COPY record_main FROM 'E:/CSV_files/record_main.csv' DELIMITERS ',' CSV;
如您所见,这与您尝试运行的命令不同。但是
COPY
在数据库服务器上运行,需要根帐户。如果没有,也可以尝试使用
\copy

\copy record_main(col1, col2, ...) FROM 'E:/CSV_files/record_main.csv'
    DELIMITER ',' CSV
更新:

@shadow正确地指出,您需要将MySQL数据导出到CSV文件中,该文件的行由行分隔符(而不是分号)分隔。但是你的Postgres复制语法看起来有点不对劲,所以也许这个答案对你仍然有帮助。

谢谢大家

在从MySQL创建CSV时,我给出了错误的行分隔符,这是错误的

正确答案

INTO OUTFILE 'E:/CSV_files/record_main-new.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
无需在PostgreSQL中自动或默认指定行分隔符“\n”

从CSV到PostgreSQL导入

FROM 'E:/CSV_files/record_main-new.csv' 
WITH DELIMITER ',' NULL '\N'  CSV
谢谢各位

在从MySQL创建CSV时,我给出了错误的行分隔符,这是错误的

正确答案

INTO OUTFILE 'E:/CSV_files/record_main-new.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
无需在PostgreSQL中自动或默认指定行分隔符“\n”

从CSV到PostgreSQL导入

FROM 'E:/CSV_files/record_main-new.csv' 
WITH DELIMITER ',' NULL '\N'  CSV

在\copy文件名上不使用引号。在\copy文件名上不使用引号。