首页 > 其他分享 >KingbaseES V8R6 几种不同的表复制方式

KingbaseES V8R6 几种不同的表复制方式

时间:2023-06-06 15:46:53浏览次数:39  
标签:V8R6 CREATE t1 复制 emp2 integer TABLE KingbaseES id

前言

当数据库遇到未知问题,有时候无法入手分析,在非生产数据库或者征得客户同意获得特殊时间,需要重建表解决,下面提供了多种不同的复制表的方法,我们了解一下他们的差异。

测试

1、CREATE TABLE AS SELECT 语句用于复制表结构和数据,但是不会复制索引。

我们可以使用以下语句基于 t1表 复制一个新表 emp1:

CREATE TABLE emp1
AS
SELECT * FROM t1;

TEST=# \d emp1
                Table "public.emp1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           |          |

TEST=# \d t1
                 Table "public.t1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           | not null |
Indexes:
    "pk_t1" PRIMARY KEY, btree (id)


如果只复制表结构,不复制数据,可以增加 WITH NO DATA 子句:
CREATE TABLE emp2
AS
SELECT * FROM t1
WITH NO DATA;

或者如下语法,例如:这种复制方法不会创建任何索引或者约束。
CREATE TABLE emp2
AS
SELECT * FROM t1
WHERE FALSE;
或
CREATE TABLE emp2
AS
SELECT * FROM t1
where 1=2;


2、CREATE TABLE LIKE 语句也可以用于复制表结构,这种方法也不会复制数据,会复制字段的 NOT NULL 约束。

CREATE TABLE emp2
(LIKE t1);

TEST=# \d emp2;
                Table "public.emp2"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           | not null |


3、CREATE TABLE AS TABLE 语句可以复制表结构和数据,这种语法不会复制索引、约束等。如果不复制数据,使用 WITH NO DATA子句

CREATE TABLE emp2
AS
TABLE t1
WITH NO DATA;

TEST=# \d emp2;
                Table "public.emp2"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           |          |



4、SELECT INTO 语句可以复制表结构和数据,但是不包含索引,约束等。例如:

SELECT * INTO emp2 FROM t1;

TEST=# \d t1
                 Table "public.t1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           | not null |
Indexes:
    "pk_t1" PRIMARY KEY, btree (id)

TEST=# \d emp2
                Table "public.emp2"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           |          |


 CREATE TABLE AS 和 SELECT INTO 语句实现同样的效果,推荐使用CREATE TABLE AS,它更常见。

5、CREATE TABLE INHERITS 语句,用于继承表结构。数据不会复制,任何针对父表的修改,子表也会自动修改。

另外,这种方法还可以为子表定义额外的字段。例如:
增加约束:
ALTER TABLE t1 ADD CHECK (id <> '');

CREATE TABLE emp2 (
     name text NOT NULL
)
INHERITS ( t1 );
其中,name 是我们额外定义的字段,其他字段继承 t1表。\d查看,emp2表有关键字Inherits: t1。t1表有关键字Number of child tables: 1 (Use \d+ to list them.)
check约束,非空约束继承到了子表,主键不能继承到子表。

TEST=# \d emp2;
                Table "public.emp2"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           | not null |
 name   | text    |           | not null |
Check constraints:
    "t1_id_check" CHECK (id <> NULL::integer)
Inherits: t1


TEST=# \d t1;
                 Table "public.t1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           | not null |
Indexes:
    "pk_t1" PRIMARY KEY, btree (id)
Check constraints:
    "t1_id_check" CHECK (id <> NULL::integer)
Number of child tables: 1 (Use \d+ to list them.)
父表增加列应用到了子表上
alter table t1 ADD COLUMN price int;
ALTER TABLE t1 DROP CONSTRAINT t1_id_check;

TEST=# \d emp2
                Table "public.emp2"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           | not null |
 name   | text    |           | not null |
 price  | integer |           |          |
Inherits: t1

TEST=# \d t1;
                 Table "public.t1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           | not null |
 price  | integer |           |          |
Indexes:
    "pk_t1" PRIMARY KEY, btree (id)
Number of child tables: 1 (Use \d+ to list them.)

标签:V8R6,CREATE,t1,复制,emp2,integer,TABLE,KingbaseES,id
From: https://www.cnblogs.com/kingbase/p/17173019.html

相关文章

  • KingbaseES V8R6集群运维案例--主库PITR恢复后备库无法连接到集群
    案例说明:KingbaseESV8R6集群,在主库执行PITR恢复后,clone备库;但是启动集群后,备库无法连接到主库,流复制状态和集群节点状态异常。适用版本:KingbaseESV8R6一、问题现象如下图所示,集群备库节点状态和流复制异常:二、问题分析1、检查备库数据库服务状态如下图所示,sys_log日......
  • C++类构造函数、拷贝构造函数、复制构造函数、复制构造函数、构造函数显示调用和隐式
    一、构造函数是干什么的 1.2.{3.public:4.//类Counter的构造函数5.//特点:以类名作为函数名,无返回类型6.Counter()7.{8.0;9.}10.private:11.//数据成员12.intm_value;13.}      该类对......
  • CAD 复制多个对象
    下面示例使用ObjectIdCollection对象来跟踪应该复制的对象。一旦对象ids被添加进集合,集合就会进行迭代,新的对象会被Clone函数进行创建,然后添加进模型空间。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingAutodesk.AutoCAD.Runti......
  • Redis_主从复制
    一、主从复制介绍主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,slave以读为主好处:读写分离,性能扩展;容灾快速恢复(一主多从):一台slave从机挂掉,马上切换到另一台slave从机提供服务。主机挂:集群集群:一主多从——关联——一主多从二、主从复制配......
  • Redis主从复制
    主从复制简介主从复制即将master中的数据即时、有效的复制到slave中。。特征:一个master可以拥有多个slave,一个slave只对应一个master职责:master写数据执行写操作时,将出现变化的数据自动同步到slave读数据(可忽略)slave读数据写数据(禁止)......
  • CAD 复制对象
    为了复制对象,要在对象上运用已提供的Clone函数。这个函数会创建一个与原始对象的重复的新对象。一旦创建了副本对象,就可以将其添加或附加到数据库之前对其进行修改。如果不变换对象或更改它们的位置,则新对象将位于与原对象相同的位置。如果你需要复制大量的对象,可以添加每个对象......
  • MySQL主从复制
    MySQL主从复制一、复制概述将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行,从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。二、复制原理My......
  • MySQL数据库复制技术2
    一:复制的概念。    可能很多人认为,复制很简单就是把之前的数据直接转移到新的数据库当中不就是复制吗。但是在MySQL数据库中:复制指的就是复制一个服务器上(称为主节点服务器或者简称主节点)的所有改变到另一个服务器(称为从节点服务器或简称从节点)。复制通常用来创建主节点的一......
  • Word复制过去源格式也不对问题
    我在做毕业论文的时候,各种材料文档要集成在一个文档。结果复制过去,不是表格断了就是字间距宽了,OpenType选项变灰等字体问题,等等。这其实是word文档的兼容模式,老文档字间距紧凑,而新文档间距拉长。结果可能造成表格断开到第二页。如果要转换成最新的版本,方法是:菜单栏的“文件”(“......
  • vscode中markdown文件中怎么直接粘贴复制的图片?
    在vscode中显示图片用如下命令:![图片描述](图片URL)但是需要先把图片保存成文件,不太方便.安装vscode的PasteImage插件即可.这样,先截屏,然后按ctrl+alt+v键,就可以自动插入图片了,形如下面的样式:![](2023-06-02-17-41-00.png)另外,再说一个截屏的小技巧,如果是......