使用copy命令把csv文件导入postgres数据库
1. 把excel另存为csv
2. 使用txt打开csv格式
3. 以UTF-8格式编码,另存为blacklist20141231.csv
4. 创建一个表
Create table backlist_20141231(日期 varchar(20),手机号码 nvarchar(20),渠道 nvarchar(50));
5. 使用copy命令,copy backlist_20141231 from ‘d:/blacklist20141231.csv’ delimiter as ‘,’ csv quote as ‘”’;
这个错误,是没仔细造成的,from ‘d:/blacklist20141231.cs’应该是from ‘d:/blacklist20141231.csv’;改过来就好了,如下图
6. 现在的编码格式还是GBK哦,查询下导入的数据
中文的地方都是空白哦。
7. 现在再把client_encoding设置为UNICODE就ok了。
8. 这证明了这个blacklist20141231.csv是可以使用copy命令导入到postgres的。在没成功前还遇到了很多错误,我现在就来模拟几个吧。
9. 我们重新建表backlist20141231_er1,并重新复制一份blacklist20141231.csv为blacklist20141231_1.csv
Create table backlist20141231_er1(日期 date,手机号码 varchar(20),渠道 varchar(50));
copy backlist20141231_er1 from ‘d:/blacklist20141231_1.csv‘ delimiter as ‘,‘ csv quote as ‘"‘;
SQL 状态:22007
什么情况呢?
可以从第7步中的截图看到第一行记录是”日期”,”手机号码”,”渠道”;但是我的创建的表backlist20141231_er1的日期类型是date,这没法隐式转换的。那我们在csv中把第一行去掉再试下
Set client_encoding=UNICODE;
SELECT * FROM backlist20141231_er1
Limit 10;
10. 我们还是以blacklist20141231_1.csv(把第一条记录删掉后)。电话号码应该是11位,我们再创建一个表,把电话号码设置为varchar(11)试试。
Create table backlist20141231_er2(日期 date,手机号码 varchar(11),渠道 varchar(50));
还是22007,把手机号码的varchar类型长度加长即可,我的excel里手机号码不是规整的。
11. 搞了大半天,其实遇到的错误很多,很多时候都没有头绪,偶尔看到一点曙光,就慢慢的往曙光那靠近。
还有个问题不知道为什么?client_encoding有时是UNICODE,有时是UTF-8;明明设置的是UNICODE,不经意间再看竟然成了UTF-8。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。