金仓数据库KingbaseES中COPY TO的介绍
关键字:
KingbaseES、COPY、人大金仓
什么是COPY TO
在数据库管理系统中,数据的导入导出是非常常见的操作,而COPY命令则是实现数据导入导出的强大工具之一。COPY TO 可以将数据库中的表数据复制的文件中。
COPY TO的部分语法
COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }
TO { 'filename' | PROGRAM 'command' | STDOUT }
其中,
table_name表示需一个现有表的表名;
column_name表示可选的要被复制的列列表。如果没有指定列列表,则该表的所有列(除了生成列)都会被复制。;
query表示其结果要被复制的 SELECT 、 VALUES 、 INSERT 、 UPDATE 或者 DELETE 命令。
filename输入或者输出文件的路径名。一个输入文件的名称可以是一个绝对或相对路径,但一个输出文件的名称必须是绝对路径。
PROGRAM一个要执行的命令。在 COPY FROM 中,输入将从该命令的标准输出读取,而在 COPY TO 中,输出会写入到该命令的标准输入。
STDOUT 指定输出到客户端应用。
COPY TO的实例
1.COPY { table_name [ ( column_name [, ...] ) ] | ( query ) } TO…
- COPY table_name TO 'filename'
首先,有一个表如下
test=# create table t1(a int, b text); CREATE TABLE test=# insert into t1 values(1, 'aaa'); INSERT 0 1 test=# insert into t1 values(2, 'bbb'); INSERT 0 1 test=# select * from t1; a | b ---+----- 1 | aaa 2 | bbb (2 rows) |
将表中所有数据复制到外部的t1.txt文件中:
test=# copy t1 to '/home/zhangnan/t1.txt'; COPY 2 |
注意,文件名路径必须是绝对路径,不能是相对路径。
现在可以去t1.txt文件中查看数据是否被成功复制。
[zhangnan@kes_0_14 ~]$ cat t1.txt 1 aaa 2 bbb |
- COPY table_name ( column_name [, ...] ) TO 'filename'
只复制部分列到文件中
test=# copy t1(a) to '/home/zhangnan/t1.txt'; COPY 2 test=# copy t1(b) to '/home/zhangnan/t1.txt'; COPY 2 |
文件中数据分别为
[zhangnan@kes_0_14 ~]$ cat t1.txt 1 2 [zhangnan@kes_0_14 ~]$ cat t1.txt aaa bbb |
复制多列的话,用逗号分隔:
test=# copy t1(a,b) to '/home/zhangnan/t1.txt'; COPY 2 |
- COPY table_name ( query ) TO 'filename'
query可以是SELECT 、 VALUES 、 INSERT 、 UPDATE 或者 DELETE 命令,其中,对于INSERT 、 UPDATE 以及 DELETE 查询,必须提供一个 RETURNING 子句并且目标关系不能具有会扩展成多条语句的条件规则、 ALSO 规则或者 INSTEAD 规则。
select命令:
test=# copy (select * from t1) to '/home/zhangnan/t1.txt'; COPY 2 |
insert命令:
test=# copy (insert into t1 values(3,'ccc') returning a) to '/home/zhangnan/t1.txt'; COPY 1 |
update命令:
test=# copy (update t1 set a=999 where a=1 returning a) to '/home/zhangnan/t1.txt'; COPY 1 |
delete命令:
test=# copy (delete from t1 where a=2 returning b) to '/home/zhangnan/t1.txt'; COPY 1 |
2. COPY … TO { 'filename' | PROGRAM 'command' | STDOUT }
在使用copy命令时,上面已经介绍关于{ table_name [ ( column_name [, ...] ) ] | ( query ) }字段的使用,接下来介绍{ 'filename' | PROGRAM 'command' | STDOUT }字段。
- COPY … TO 'filename'
将表中数据复制到文件当中,文件格式可以是txt,csv等,指定文件时需注意指定绝对路径,在上面实例中,已有该字段的使用,这里不再过多赘述。
- COPY…TO PROGRAM 'command'
将表中数据复制到一个外部压缩文件中:
test=# copy t1 to program 'gzip > /home/zhangnan/a.gz'; COPY 1 |
- COPY …TO STDOUT
可以将数据复制到标准输出:
test=# copy t1 to stdout; 1 sss |
总结
COPY TO命令用于将数据库中的数据向外迁移,实现数据备份,以防数据丢失,并且还可以数据共享,方便数据交流和协作,实现了数据交换的灵活性和便利性。