人大金仓数据库KingbaseES COPY命令介绍之COPY TO

金仓数据库KingbaseES COPY命令介绍之COPY TO

关键字:

KingbaseES、COPY、COPY TO;人大金仓;KingbaseES

COPY语句介绍

在KingbaseES数据库中,支持移动表和文件系统数据的COPY命令。COPY命令分为COPY TO和COPY FROM命令。COPY TO用于移动一个表中的数据到文件中。COPY FROM支持从文件中复制数据到表中。

COPY 命令支持设置输入输出文件选项,支持选项如下:

可选选项

说明

FORMAT

输出文件格式

PROGRAM

要执行的命令,命令输入输出将被捕获

FREEZE

复制完成行冻结的数据

DELIMITER

列分隔符

TERMINATOR

换行字符

NULL

空字符串

HEADER

是否输出列名

FORCE_NOT_NULL

不匹配空字符串

FORCE_NULL

指定值置空

ENCODING

文件编码格式

COPY TO的语法

COPY TO命令支持获取KingbaseES表信息复制到文件中。需要注意的是,COPY TO命令只能用于表,无法用于视图。COPY视图需要利用视图查询语句进行复制。

COPY TO语法如下:

COPY { table_name [ ( column_name [, ...] ) ] | ( query ) }

TO { 'filename' | PROGRAM 'command' | STDOUT }

[ [ WITH ] ( option [, ...] ) ]

COPY TO的使用

示例1:对表进行复制

--创建待复制的表

Create table timezone_table as select * from pg_timezone_names;

--copy to的目标文件只能以绝对路径的方式指定

copy timezone_table to 'timezone.csv' with (format 'csv',header 'true');

copy timezone_table to '/opt/timezone.csv' with (format 'csv',header 'true');

输出csv文件的部分内容如下,可以看到csv文件保存了列名:

name

abbrev

utc_offset

is_dst

Africa/Ndjamena

WAT

00:00.0

f

Africa/Abidjan

GMT

0

f

Africa/Cairo

EET

00:00.0

f

Africa/Accra

GMT

0

f

Africa/Bissau

GMT

0

f

Africa/Nairobi

EAT

00:00.0

f

Africa/Monrovia

GMT

0

f

Africa/Tripoli

EET

00:00.0

f

Africa/Casablanca

1

00:00.0

f

Africa/El_Aaiun

1

00:00.0

f

Africa/Maputo

CAT

00:00.0

f

Africa/Windhoek

CAT

00:00.0

f

Africa/Lagos

WAT

00:00.0

f

Africa/Sao_Tome

GMT

0

f

Africa/Johannesburg

SAST

00:00.0

f

Africa/Khartoum

CAT

00:00.0

f

Africa/Juba

EAT

00:00.0

f

Africa/Tunis

CET

00:00.0

f

Africa/Ceuta

CET

00:00.0

f

示例2:COPY TO到当前客户端输出

copy timezone_table to stdout with (format 'csv',header 'true');

--部分输出如下

示例3:不支持对视图进行复制,可以使用查询的方式实现对视图的复制

--直接copy视图会执行失败

copy pg_timezone_names to 'timezone.csv' with (format 'csv',header 'true');

--copy查询语句的方式会成功执行

copy (select * from pg_timezone_names) to stdout with (format 'csv',header 'true', DELIMITER '|');

示例4:对有继承关系的表进行复制

--创建继承关系的表

create table parent_table(id int, name varchar(10));

create table child_table(info varchar(10) default 'text' )inherits(parent_table);

--插入所需数据

insert into parent_table values(1, '1'), (2, '2'), (3, '3');

insert into child_table values(4, '1'), (5, '2'), (6, '3');

--查询父表数据,可以查到子表的记录

Select * from parent_table;

--copy父表,不copy到子表的记录

Copy parent_table to stdout with (format 'csv',header 'true', DELIMITER '|');

--可以使用查询命令进行copy

Copy (select * from parent_table) to stdout with (format 'csv',header 'true', DELIMITER '|');

示例5:copy命令也可以用于DML语句的返回备份

-- insert语句

Copy (insert into parent_table values(7, '1'), (8, '2'), (9, '3') returning *) to stdout with (format 'csv',header 'true', DELIMITER '|');

--update语句

Copy (update parent_table set name= 'update' returning *) to stdout with (format 'csv',header 'true', DELIMITER '|');

--delete语句

Copy (delete parent_table returning *) to stdout with (format 'csv',header 'true', DELIMITER '|');

--当DML语句无返回时,会报错

Copy (delete parent_table) to stdout with (format 'csv',header 'true', DELIMITER '|');

总结

在KingbaseES中提供了COPY命令进行KingbaseES表与文件系统之间的数据移动。本文主要介绍了COPY命令中的COPY TO。在使用COPY TO命令时,需要注意无法对视图进行拷贝。当备份DML语句时,需要注意DML语句必须有RETURNING子句。

参考资料

《KingbaseES产品手册》

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值