PostgreSQL - 继承
本文所有示例基于PostgreSQL 10测试。
1 | SELECT "version"() |
继承
我们用动物(animal)和人类(human)的例子来进行说明,human继承自animal。
1 | CREATE TABLE animal ( |
动物模型中有姓名和年龄,假设只有人类才有语言。
插入一些数据,
1 | INSERT INTO animal ("name", "age") |
查询所有动物
1 | SELECT * FROM animal |
只查询人类
1 | SELECT * FROM ONLY human |
只查询动物
1 | SELECT * FROM ONLY animal |
注意点
继承不会自动地将来自
INSERT
或COPY
命令的数据传播到继承层次中的其他表中。1
2
3
4
5
6SELECT p.relname, c.name, c.age
FROM animal c, pg_class p
WHERE c.tableoid = p.oid
-- animal Cat 1 3
-- animal Cat 2 2
-- human Leon 34父表上的所有检查约束和非空约束都将自动被它的后代所继承, 除非使用
NO INHERIT
子句明确指定。其他类型的约束(唯一、主键和外键约束)则不会被继承。一个表可以从超过一个的父表继承,在这种情况下它拥有父表们所定义的列的并集。
并非所有的SQL命令都能工作在继承层次上。