暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB的多种表复制方式及其差异

原创 言笑 2024-10-18
217

引言

MogDB提供了多种不同的复制表的方法,它们之间主要的区别是能否复制表结构或数据(或两者同时满足),本文例举几种表的复制方式及其优缺点。

表复制策略

首先创建一个测试表t,插入3条数据

create table t
(
id int primary key,
name varchar(20),
sex char(1) default 1 check (sex=1 or sex=2),
identify char(18) not null unique
);

insert into t values
(1,'秦思',2,1111111111111111),
(2,'左伊',1,6666666666666666),
(3,'刘燕',2,8888888888888888);

image.png

1.使用as table方式

create table t1 as table t;

image.png
该方式可以复制表的基本结构和数据(如果只想复制表结构可以在最后加上with no data),但是无法同时复制字段的任何约束以及索引。

2.使用as select方式

create table t2 as select * from t;

image.png
该方式的的复制情况和as table基本一样,也不会创建任何的索引、约束。

3.like方式

create table t3(like t);

image.png
上图可以看到,该方式仅仅复制表的基本结构(不copy数据),但是默认会同时复制表的非空约束not null,like附带多种参数选项,在复制表结构的同时可以指定需要同时复制的对象:

where like_option can be:
{ INCLUDING | EXCLUDING } { DEFAULTS | GENERATED | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | DISTRIBUTION | ALL }

image.png
“like table including all”可以完全复制源表的结构,故该手段经常用于单纯复制表结构。。

4.into方式

select * into t5 from t;

image.png
into方式会复制基本的表结构和数据,功能类似于as复制,但是更推荐as方式,因为其适用性更好。

5.inherits方式

create table t6() inherits(t);

inherits是继承子句,该种方式创建的表会自动继承父表结构,当然也可以额外添加字段,在源结构上进行补足。在pg早期,分区的实现便是通过继承来实现的,分区表继承父表的结构,通过触发器判定数据应插入的分区,查询父表便可以查询到所有分区数据。

总结

mogdb提供了as、into、like等方式来实现表的复制,有的只能单纯复制表结构,有的既可以复制结构(但缺失索引和约束)又可以复制数据,每种方式都有利弊,通常需要我们结合业务场景来综合评估最佳方案,生产实践中通过including和insert … select结合的方案可以帮助我们高效完成表备份。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论