ALTER TABLE INHERIT

功能描述

修改继承表,包括将普通表改为继承表及将继承表改为普通表。

注意事项

  • 只有完全包含父表结构的表才能被改为子表。
  • 解除继承关系后,虽然不再是子表,但还是留有从父表继承的同名属性列,已有的数据也不会被删除。
  • 修改父表的表结构,继承表也跟随着变化。
  • 修改父表的数据,继承表的数据会被一起更新。
  • 从父表继承的非空、默认值和检查三种约束不能被删除或修改。
  • 使用like parent_name建表的话,父表删除了某列,子表列不会被删除。
  • 不使用like parent_name建表的话,父表删除了某列,子表列会被删除。
  • 使用including all从父表继承的索引、唯一、主键、外键约束可以被删除或修改。

语法格式

ALTER TABLE table_name { inherit | no inherit } parent_name;

参数说明

  • table_name

    继承表子表的表名。

    取值范围:字符串,要符合标识符的命名规范。

  • parent_name

    要继承的父表的表名。

    取值范围:字符串,要符合标识符的命名规范。

示例

--创建两张父表
openGauss=# CREATE TABLE father
(
    id int NOT NULL,
    md_attr CHARACTER VARYING(32) UNIQUE,
    num int DEFAULT 2,
    salary REAL CHECK(SALARY > 0),
    CONSTRAINT pk_father_z83rgvsefn PRIMARY KEY (id)
);
openGauss=# CREATE TABLE father2 (id int);

--创建子表
openGauss=# CREATE TABLE child (id int);
openGauss=# ALTER TABLE child inherit father2;
openGauss=# CREATE TABLE child2() inherits(father);
openGauss=# CREATE TABLE child3(like father) inherits(father);

--修改父表的表结构,子表也跟随着变化。
openGauss=# ALTER TABLE father alter COLUMN id type CHAR;

--父表删除列
openGauss=# ALTER TABLE father DROP COLUMN if exists salary;

--不用like father建表的话,子表列会被删除
openGauss=# \d+ child2

--用like father建表的话,子表列不会被删除
openGauss=# \d+ child3

--解除继承关系
openGauss=# ALTER TABLE child no inherit father2;

--删除表
openGauss=# drop table father cascade;
openGauss=# drop table child cascade;
openGauss=# drop table father2 cascade;

相关链接

CREATE TABLE INHERITSDROP TABLE

意见反馈
编组 3备份
    openGauss 2024-04-27 00:42:13
    取消