将 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 NULL 值导入的 PostgreSQL 是文本 - 需要 null
如何将 .csv 文件导入 Hasura PostgreSQL 数据库?