将 Mysql CSV 导入 PostgreSQL

Posted

技术标签:

【中文标题】将 Mysql CSV 导入 PostgreSQL【英文标题】:Importing Mysql CSV to PostgreSQL 【发布时间】:2016-06-16 10:13:48 【问题描述】:

我正在尝试将我从 mysql 生成的 CSV 文件迁移到 AWS Redshift(PostgreSql)。从 Mysql 生成 CSV 文件的查询是:

select * INTO OUTFILE 'filename' FIELDS TERMINATED BY '\t'

这就是以以下形式生成输出:

1559744 WIFI    123.63.13.93    conversation_list   page_load   0.16    success "NetworkClass":"WIFI" android_app     2016-06-15 00:00:00 c700b6e04077489 3.1_wo___ct_cd__gmmt_cst__  4.4.2

但在加载到 Redshift 时,我遇到以下错误:

缺少换行符:在位置 7` 发现意外字符 0x57。

我用来加载 CSV 文件的查询是:

copy table_name FROM 's3://mybucket'    
credentials 'aws_access_key_id=XXXXXXXXX;aws_secret_access_key=XXXXXXXX' 
delimiter AS '\t'

谢谢

【问题讨论】:

【参考方案1】:

尝试去掉分隔符后的AS

copy table_name FROM 's3://mybucket'    
credentials 'aws_access_key_id=XXXXXXXXX;aws_secret_access_key=XXXXXXXX' CSV
delimiter '\t' MAXERROR 100000 IGNOREBLANKLINES FILLRECORD

或者这个

copy table_name FROM 's3://mybucket'    
credentials 'aws_access_key_id=XXXXXXXXX;aws_secret_access_key=XXXXXXXX' delimiter ',' removequotes MAXERROR 100000 IGNOREBLANKLINES FILLRECORD

【讨论】:

既然你复制了 CSV 文件,你应该改变分隔符【参考方案2】:

检查 csv 文件的编码是否与您的数据库匹配。否则使用所需的编码重新创建数据库。

【讨论】:

我无法再次使用编码创建文件,这些是日志文件,大小为 TB。 不要更改文件,删除数据库,创建一个具有正确编码的新数据库 我没听懂你,你能分享一些外部参考吗? 打开 csv 文件,检查属性,在某处你会找到编码,现在使用此命令创建数据库。创建数据库 "db_name" WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;这里我假设编码是“UTF-8”,

以上是关于将 Mysql CSV 导入 PostgreSQL的主要内容,如果未能解决你的问题,请参考以下文章

将压缩的 CSV 文件导入 PostgreSQL

将 CSV 文本数组导入 PostgreSQL 9.2

从 CSV NULL 值导入的 PostgreSQL 是文本 - 需要 null

如何将 .csv 文件导入 Hasura PostgreSQL 数据库?

将 CSV 导入到 postgreSQL 中的表中,忽略重复项 - 亚马逊 AWS/RDS

从命令行导入 PostgreSQL CSV