加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql----COPY之表与文件之间的拷贝

发布时间:2020-12-13 17:02:15 所属栏目:百科 来源:网络整理
导读:postgresql提供了COPY命令用于表与文件(和标准输出,标准输入)之间的相互拷贝,copy to由表至文件,copy from由文件至表。 示例1.将整张表拷贝至标准输出 test=# copy tbl_test1 to stdout;1 HA 122 ha 543 示例2.将表的部分字段拷贝至标准输出,并输出字段

postgresql提供了COPY命令用于表与文件(和标准输出,标准输入)之间的相互拷贝,copy to由表至文件,copy from由文件至表。

示例1.将整张表拷贝至标准输出

test=# copy tbl_test1 to stdout;
1    HA    12
2    ha    543

示例2.将表的部分字段拷贝至标准输出,并输出字段名称,字段间使用','分隔

test=# copy tbl_test1(a,b) to stdout delimiter ',' csv header;
a,b
1,HA
2,ha

示例3.将查询结果拷贝至标准输出

test=# copy (select a,b from tbl_test1 except select e,f from tbl_test2 ) to stdout delimiter ',' quote '"' csv header;
a,b
2,ha

将标准输入拷贝至表中需要注意几点

1.字段间分隔符默认使用【Tab】键

2.换行使用回车键

3.结束使用反斜线+英文据点(.)

4.最好指定字段顺序,要不然可能会错位赋值

示例4.将标准输入拷贝至表中

test=# copy tbl_test1(a,b,c) from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1    公举    公主
>> 2    万岁    万万岁
>> .
COPY 2
test=# select * from tbl_test1 ;
 a |  b   |   c    
---+------+--------
 1 | HA   | 12
 2 | ha   | 543
 1 | 公举 | 公主
 2 | 万岁 | 万万岁
(4 rows)

示例5.从标准输入拷贝至表中,并将标准输入第一行作为字段名(和表中不符也没关系,copy会自动忽略第一行),字段分隔符为','

test=# copy tbl_test1(a,c) from stdin delimiter ',' csv header;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> a,c
>> 3,你好,hello
>> 4,超人,super
>> .
COPY 2
test=# select * from tbl_test1 ;
 a |  b   |   c    
---+------+--------
 1 | HA   | 12
 2 | ha   | 543
 1 | 公举 | 公主
 2 | 万岁 | 万万岁
 3 | 你好 | hello
 4 | 超人 | super
(6 rows)

以上是表与标准输出和标准输入间的相互拷贝,表与文件的拷贝和以上完全相同,只是将标准输出和标准输入换成文件。需要注意的是:

1.数据库用户必须有文件所在的路径的写权限。

2.如果表存在中文字符,导出至csv文件时需要设置编码为GBK,否则使用excel打开是中文显示乱码。

3.将文件导入表中时仍要考虑编码问题

示例6.将表拷贝至csv文件中

test=# copy tbl_test1 to '/tmp/tbl_test1.csv' delimiter ',' csv header;
COPY 6

使用excel打开文件,中文显示为乱码

示例7.将表以GBK编码拷贝至csv文件中

test=# copy tbl_test1 to '/tmp/tbl_test1.csv' delimiter ',' csv header encoding 'GBK';
COPY 6

使用excel打开,中文显示正常

示例8.将刚才导出的文件再次拷贝至表中,使用默认编码UTF8

test=# copy tbl_test1(a,c) from '/tmp/tbl_test1.csv' delimiter ',' csv header;
ERROR:  invalid byte sequence for encoding "UTF8": 0xb9
CONTEXT:  COPY tbl_test1,line 4

示例9.将刚才导出的文件再次拷贝至表中,使用GBK编码

test=# copy tbl_test1(a,' csv header encoding 'GBK';
COPY 6

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读