PostGreSQL CSV导入行分隔符
我想从MySQL表中导出数据并将该数据导入到PgSQl数据库中。PostGreSQL CSV导入行分隔符
导出脚本从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或任何,它会导致错误。
ERROR: extra data after last expected column CONTEXT: COPY record_main, line 1: >""12635","55025","1","ASCS","P","5320700","2015-01-01 >00:00:00",\N,\N,\N,\N,\N,\N,"DEED",\N,\N,\N,\N,..."
然后打开CSV文件,我手动将一行数据分成两行数据。
我从每行的末尾删除了分号。
这次它工作正常。 我觉得在行分隔符错误。我的问题是我怎么能说到PgSQl到行分隔符是这个。像我给出的DELIMITER
据我所知,PostgreSQL的copy statement预计行通过新行字符(S)分开:
COPY FROM can handle lines ending with newlines, carriage returns, or carriage return/newlines.
所以,你必须调整mysql的出口使用新行字符作为行分隔符,或者您需要预处理转储以用新行替换;
字符。
从this SO question你应该使用COPY
语法是:
COPY record_main FROM 'E:/CSV_files/record_main.csv' DELIMITERS ',' CSV;
正如你所看到的,这是你想要运行的命令不同。但COPY
在数据库服务器上运行并需要一个root帐户。如果你没有一个,你也可以尝试使用\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
在\ copy文件名中不使用引号。 – Jasen