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

 

posted @   一只竹节虫  阅读(110)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2021-08-20 达梦数据库的评估
点击右上角即可分享
微信分享提示