继承表
PostgreSQL支持表继承,这是一种将多个表组织成一个继承层次结构的方式。在表继承中,一个父表可以定义一组共享的列和约束,并可以有多个子表继承这些定义,并可以添加自己的额外列和约束。
下面是关于如何使用PostgreSQL继承表的一些重要概念和用法:
CREATE TABLE employees (
employee_id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
1、定义子表并继承父表
写法1:INHERITS (父表名);
特点:继承了字段和检查约束和非空约束,不包括唯一性、主键和外键约束,但不继承父表索引
CREATE TABLE managers (manager_id INT) INHERITS (employees);
写法2:(like 父表名 including all)INHERITS (父表名);
特点:继承了字段和检查约束和非空约束,不包括唯一性、主键和外键约束,也继承了父表索引
CREATE TABLE engineer(like employees including all)INHERITS (employees);
2、查看表之间的继承关系
pg_inherits记录有关表和索引继承层次结构的信息。数据库中的每个直接父子表或索引关系都有一个条目。(间接继承可以通过下列条目链来确定。)
SELECT inhrelid::regclass AS child_table,
inhparent::regclass AS parent_table
FROM pg_inherits;
3、修改继承关系
添加继承关系:
ALTER TABLE parent_table INHERIT child_table1, child_table2, ...;
删除继承关系: 删除了继承关系以后子表从父表继承的字段还在,只是以后没关系了
ALTER TABLE parent_table NO INHERIT child_table1, child_table2, ...;
2. 使用继承特性实现本地分区
-- 创建父表
CREATE TABLE parent_table (
id SERIAL PRIMARY KEY,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
) PARTITION BY RANGE (created_at);
-- 创建子表,作为分区
CREATE TABLE child_table_2021
PARTITION OF parent_table
FOR VALUES FROM ('2021-01-01') TO ('2022-01-01');
CREATE TABLE child_table_2022
PARTITION OF parent_table
FOR VALUES FROM ('2022-01-01') TO ('2023-01-01');
-- 插入数据时,PostgreSQL会根据分区键(created_at)自动将数据插入到正确的子表中
INSERT INTO parent_table (id) VALUES (1); -- 会被插入到child_table_2021
INSERT INTO parent_table (id, created_at) VALUES (2, '2022-02-01'); -- 会被插入到child_table_2022
在这个例子中,父表parent_table
定义了一个范围分区键created_at
。两个子表child_table_2021
和child_table_2022
继承了父表的结构,并且为每个子表指定了数据存储的时间范围。
当插入数据到parent_table
时,如果created_at
值在相应的范围内,PostgreSQL会自动将数据存储到正确的子表中。
标签:01,PostgreSQL,parent,继承,child,table,TABLE From: https://www.cnblogs.com/dll102/p/18368901