小言_互联网的博客

如何将excel表格数据导入postgresql数据库

322人阅读  评论(0)

作者:瀚高PG实验室 (Highgo PG Lab)- 禹晓

实际的工作中,我们经常会碰到统计数据的工作,有些维度的统计数据因为工作需要我们需要导出为excel作为报表附件供不同的部门审查。为了方便以后的对比工作,领导会让在数据库中创建一张表,用于专门记录这些数据。此时我们DBA需要将这些excel表格导入到数据库中,copy和\copy命令为我们提供了解决办法,本文主要通过copy命令的使用,介绍如何将excel表格导入至数据库中。关于copy及\copy命令的区别,请广大博友通过另一篇文章《如何将postgresql数据库表内数据导出为excel格式》查看。

1、copy基本语法


  
  1. COPY { 表名 [ ( 列名称 [, ...] ) ]
  2. from { '文件名' | PROGRAM '命令' | STDIN }
  3. [ [ WITH ] ( 选项 [, ...] ) ]
  4. 选项可以是下列内容之一
  5. FORMAT 格式_名称
  6. FREEZE [ 布尔 ]
  7. DELIMITER '分隔字符'
  8. NULL '空字符串'
  9. HEADER [ 布尔 ]
  10. QUOTE '引用字符'
  11. ESCAPE '转义字符'
  12. FORCE_QUOTE { ( 列名称 [, ...] ) | * }
  13. FORCE_NOT_NULL ( 列名称 [, ...] )
  14. ENCODING 'encoding_name(编码名)'

2、参数含义介绍


  
  1. FORMAT:指复制到文件的文件类型,如:CSV,TEXT。
  2. FREEZE :冻结数据,然后执行VACUUM FREEZE。
  3. DELIMITER:指在导出文件时的分隔符指定需要用单引号。在TEXT时默认为tab,CSV文件默认是逗号。不支持binary文件格式。
  4. HEADER:指在复制到文件时带上表字段名称。
  5. NULL :指定null值,默认为\N。
  6. QUOTE: 声明 CSV 模式里的引号字符,缺省是双引号。
  7. ESACPE: 指定转义符,缺省是 QUOTE 值(通常是双引号)。
  8. ENCODING:指定文件的编码,如果没有指定就默认使用客户端的字符集。

3、使用示例

①编辑excel表格,填充测试数据,表格的保存格式为csv格式,编码原则为UTF-8,逗号分隔。

②将excel表格上传至数据库服务器,根据表格字段创建对应表。


  
  1. postgres= # create table movie_star(user_id int,user_name varchar(100),age int,gender text,address varchar(100),remark text);
  2. CREATE TABLE
  3. postgres= #
  4. postgres= #
  5. postgres= #
  6. postgres= # select * from movie_star ;
  7. user_id | user_name | age | gender | address | remark
  8. ---------+-----------+-----+--------+---------+--------
  9. (0 rows)

③使用copy命令导入excel数据。


  
  1. postgres= # copy movie_star from '/pg/movie_star.csv' with csv header;
  2. COPY 9
  3. postgres= #
  4. postgres= # select * from movie_star ;
  5. user_id | user_name | age | gender | address | remark
  6. ---------+---------------+-----+--------+-------------------+------------------------------------------
  7. 1 | Jackie Chan | 45 | male | HK,CHINA,ASIA | police story project A rush hour
  8. 2 | Gong Li | 38 | female | "Singapore",ASIA | Farewell My Concubine Lifetimes Living
  9. 3 | Brigitte Lin | 46 | female | HK,CHINA,ASIA |
  10. 4 | Maggie Cheung | 39 | female | HK,CHINA,ASIA |
  11. 5 | Jet Li | 41 | male | "Singapore",ASIA | Fist of LegendOnce Upon a Time in China
  12. 6 | Jacky Cheung | 35 | male | HK,CHINA,ASIA |
  13. 7 | Chow Yun Fat | 48 | male | HK,CHINA,ASIA |
  14. 8 | Donnie Yen | 36 | male | HK,CHINA,ASIA |
  15. 9 | Stephen Chow | 40 | male | HK,CHINA,ASIA |
  16. ( 9 rows)

④查看上传至服务器内的excel表格数据


  
  1. postgres=# \! cat /pg/movie_star.csv
  2.  user_id,user_name,age,gender,address,remark
  3. 1,Jackie Chan, 45,male, "HK,CHINA,ASIA ",police story project A rush hour
  4. 2,Gong Li, 38,female, " " "Singapore" ",ASIA", Farewell My Concubine Lifetimes Living
  5. 3,Brigitte Lin, 46,female, " HK,CHINA,ASIA",
  6. 4,Maggie Cheung, 39,female, "HK,CHINA,ASIA ",
  7. 5,Jet Li, 41,male, "" "Singapore" ",ASIA", Fist of LegendOnce Upon a Time in China
  8. 6,Jacky Cheung , 35,male, "HK,CHINA,ASIA",
  9. 7,Chow Yun Fat, 48,male, "HK,CHINA,ASIA",
  10. 8, Donnie Yen, 36,male, "HK,CHINA,ASIA",
  11. 9,Stephen Chow, 40,male, "HK,CHINA,ASIA",

通过在excel表格我们可以看到,将excel表格保存为csv格式(UTF-8,逗号分隔)后,系统自动对表格内的数据进行了格式转换,部分字段内加入了转义符,比如双引号,逗号等,避免了数据导入出错。


转载:https://blog.csdn.net/pg_hgdb/article/details/114300326
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场