作者:瀚高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,逗号分隔)后,系统自动对表格内的数据进行了格式转换,部分字段内加入了转义符,比如双引号,逗号等,避免了数据导入出错。
转载:https://blog.csdn.net/pg_hgdb/article/details/114300326
查看评论