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

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

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

1、copy基本语法

COPY { 表名 [ ( 列名称 [, ...] ) ]    
from { '文件名' | PROGRAM '命令' | STDIN }   
 [ [ WITH ] ( 选项 [, ...] ) ]

选项可以是下列内容之一
 FORMAT 格式_名称    
 FREEZE [ 布尔 ]    
 DELIMITER '分隔字符'    
 NULL '空字符串'    
 HEADER [ 布尔 ]    
 QUOTE '引用字符'    
 ESCAPE '转义字符'    
 FORCE_QUOTE { ( 列名称 [, ...] ) | * }    
 FORCE_NOT_NULL ( 列名称 [, ...] )      
 ENCODING 'encoding_name(编码名)'

2、参数含义介绍

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

3、使用示例

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

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

postgres=# create table movie_star(user_id int,user_name varchar(100),age int,gender text,address varchar(100),remark text);
CREATE TABLE
postgres=# 
postgres=# 
postgres=# 
postgres=# select * from movie_star ;
 user_id | user_name | age | gender | address | remark 
---------+-----------+-----+--------+---------+--------
(0 rows)

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

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

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

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

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

已标记关键词 清除标记
相关推荐