如何將excel表格數據導入postgresql數據庫

做者:瀚高PG實驗室 (Highgo PG Lab)- 禹曉html

實際的工做中,咱們常常會碰到統計數據的工做,有些維度的統計數據由於工做須要咱們須要導出爲excel做爲報表附件供不一樣的部門審查。爲了方便之後的對比工做,領導會讓在數據庫中建立一張表,用於專門記錄這些數據。此時咱們DBA須要將這些excel表格導入到數據庫中,copy和\copy命令爲咱們提供瞭解決辦法,本文主要經過copy命令的使用,介紹如何將excel表格導入至數據庫中。關於copy及\copy命令的區別,請廣大博友經過另外一篇文章《如何將postgresql數據庫表內數據導出爲excel格式》查看。git

一、copy基本語法sql

COPY { 表名 [ ( 列名稱 [, ...] ) ]    
from { '文件名' | PROGRAM '命令' | STDIN }   
 [ [ WITH ] ( 選項 [, ...] ) ]

選項能夠是下列內容之一
 FORMAT 格式_名稱    
 FREEZE [ 布爾 ]    
 DELIMITER '分隔字符'    
 NULL '空字符串'    
 HEADER [ 布爾 ]    
 QUOTE '引用字符'    
 ESCAPE '轉義字符'    
 FORCE_QUOTE { ( 列名稱 [, ...] ) | * }    
 FORCE_NOT_NULL ( 列名稱 [, ...] )      
 ENCODING 'encoding_name(編碼名)'

二、參數含義介紹數據庫

FORMAT:指複製到文件的文件類型,如:CSV,TEXT。   
FREEZE :凍結數據,而後執行VACUUM FREEZE。  
DELIMITER:指在導出文件時的分隔符指定須要用單引號。在TEXT時默認爲tab,CSV文件默認是逗號。不支持binary文件格式。  
HEADER:指在複製到文件時帶上表字段名稱。  
NULL:指定null值,默認爲\N。  
QUOTE: 聲明 CSV 模式裏的引號字符,缺省是雙引號。 
ESACPE: 指定轉義符,缺省是 QUOTE 值(一般是雙引號)。
ENCODING:指定文件的編碼,若是沒有指定就默認使用客戶端的字符集。

三、使用示例服務器

①編輯excel表格,填充測試數據,表格的保存格式爲csv格式,編碼原則爲UTF-8,逗號分隔。ide

②將excel表格上傳至數據庫服務器,根據表格字段建立對應表。post

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,逗號分隔)後,系統自動對錶格內的數據進行了格式轉換,部分字段內加入了轉義符,好比雙引號,逗號等,避免了數據導入出錯。url

相關文章
相關標籤/搜索