PostgreSQL 实现了数据表层级的继承特性。对于熟悉面向对象编程的开发者来说,这是极其直观的概念。通过继承,子表自动获得父表的所有字段列定义,并在逻辑上支持父子关系的多态查询。
声明继承关系使用 INHERITS 子句:
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
在默认情况下,针对父表 cities 发起的查询会透明级联递归扫描其所有子表(包括 capitals)。如果查询只想严格扫描父表本身的记录,可在表名前附加 ONLY 关键字:
SELECT * FROM ONLY cities;
并非所有 SQL 命令都支持自动继承,部分唯一约束与外键约束无法跨继承树生效。