码迷,mamicode.com
首页 > 数据库 > 详细

使用copy命令把csv文件导入postgres数据库

时间:2015-03-11 21:20:03      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

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。

使用copy命令把csv文件导入postgres数据库

标签:

原文地址:http://www.cnblogs.com/cnmarkao/p/4330939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!