zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

postgresql—-COPY之表与文件之间的拷贝详解数据库

文件数据库postgresql 详解 &# 之间 拷贝 8212
2023-06-13 09:20:11 时间

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; 

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; 

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,b,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,b,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打开文件,中文显示为乱码

postgresql----COPY之表与文件之间的拷贝详解数据库

 

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

 

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

COPY 6

 

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

postgresql----COPY之表与文件之间的拷贝详解数据库

 

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

test=# copy tbl_test1(a,b,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,b,c) from /tmp/tbl_test1.csv delimiter , csv header encoding GBK; 

COPY 6

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/4871.html