PostgreSQL之继承

继承表

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_2021child_table_2022继承了父表的结构,并且为每个子表指定了数据存储的时间范围。
当插入数据到parent_table时,如果created_at值在相应的范围内,PostgreSQL会自动将数据存储到正确的子表中。 

 

posted @ 2024-08-20 10:11  一只竹节虫  阅读(287)  评论(0)    收藏  举报