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

前言

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

测试

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.)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KingbaseES V8是一种基于开源PostgreSQL数据库的企业级数据库管理系统。它被开发为一个高度可扩展和安全的解决方案,适用于各种规模的企业数据处理需求。 KingbaseES V8数据库技术白皮书详细介绍了该数据库系统的特点和优势。下面是一些关键内容: 1. 安全性:KingbaseES V8采用了严格的安全机制来保护数据的机密性和完整性。它支持数据加密、访问控制和安全审计等功能,确保敏感数据不会被未经授权的人员访问。 2. 高可靠性:KingbaseES V8通过提供数据库事务和持久性来确保数据的可靠性。它支持ACID(原子性、一致性、隔离性和持久性)属性,使得数据库在发生故障或中断时能够进行恢复并保持数据的一致性。 3. 高扩展性:KingbaseES V8支持水平和垂直扩展,可以根据业务需求进行灵活的扩展。它能够处理大规模的数据存储和查询,并提供了分布式数据库和集群部署选项。 4. 大数据处理:KingbaseES V8具备处理大数据的能力,通过支持多种数据压缩和索引技术来提高数据存储和查询的效率。同时,它还提供了强大的数据备份和恢复机制,确保在数据发生意外故障时能够及时进行数据恢复。 5. 兼容性:KingbaseES V8与主流数据库标准兼容,可以实现与Oracle、SQL Server等数据库的互通和迁移。这样一来,企业在将原有数据库迁移到KingbaseES V8上时,可以事半功倍地减少迁移成本和风险。 总的来说,KingbaseES V8数据库技术白皮书详细介绍了其作为一种可靠、高效和安全的企业级数据库管理系统的优势和功能。这些特点使得KingbaseES V8成为适用于各种企业规模和数据处理需求的理想选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值