PG表继承与数据分区
理解PostgreSQL表继承机制及其在数据建模中的应用 · 难度:入门 · +15XP
表继承概念
PostgreSQL支持表继承,子表继承父表的所有列,查询父表时可以同时返回所有子表的数据。
创建继承表
-- 创建父表
CREATE TABLE person (
id SERIAL PRIMARY KEY,
name TEXT,
age INT
);
-- 创建子表
CREATE TABLE employee (
salary NUMERIC,
department TEXT
) INHERITS (person);
CREATE TABLE student (
grade INT,
school TEXT
) INHERITS (person);
插入与查询
-- 插入数据
INSERT INTO person (name, age) VALUES ('张三', 30);
INSERT INTO employee (name, age, salary, department) VALUES ('李四', 28, 50000, '技术部');
INSERT INTO student (name, age, grade, school) VALUES ('王五', 18, 12, '第一中学');
-- 查询父表返回所有数据
SELECT * FROM person;
-- 只查询子表
SELECT * FROM ONLY person; -- 只返回父表记录
继承特性
| 特性 | 说明 |
|---|---|
| 列继承 | 子表自动拥有父表所有列 |
| 约束继承 | CHECK约束会被继承 |
| 多继承 | 子表可继承多个父表 |
| 查询包含 | 查询父表包含所有子表数据 |
与分区表区别
继承更灵活(可添加额外列),但没有分区裁剪优化。分区表性能更好。
练习提示
创建一个车辆父表和汽车、卡车子表,插入数据并测试查询包含行为。