pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
我们来创建两个类。capitals 类包含各州首府,它们同时也是城市。自然地, capitals 类应当继承自 cities。
CREATE TABLE cities (
name text,
population float,
altitude int -- (in ft)
);
CREATE TABLE capitals (
state char(2)
) INHERITS (cities);
在这种情况下,capitals 的一个实例从其父类 cities 继承所有属性(name、population 和 altitude)。属性 name 的类型是 text,这是 Postgres 用于变长 ASCII 字符串的原生类型。属性 population 的类型是 float,这是 Postgres 用于双精度 浮点数的原生类型。州首府有一个额外的属性 state,表示它所在的州。在 Postgres 中,一个类可以从零个或多个其他类继承, 而查询既可以只引用一个类的所有实例,也可以引用一个类及其所有后代的所有实例。
继承层次实际上是一个有向无环图。
例如,下面的查询找出所有位于海拔 500 英尺或以上的城市:
SELECT name, altitude
FROM cities
WHERE altitude > 500;
name | altitude
-----------+----------
Las Vegas | 2174
Mariposa | 1953
(2 rows)
另一方面,要找出所有位于海拔 500 英尺以上的城市(包括州首府)的名称,查询是:
SELECT c.name, c.altitude
FROM cities* c
WHERE c.altitude > 500;
它返回:
name | altitude -----------+---------- Las Vegas | 2174 Mariposa | 1953 Madison | 845
这里 cities 后面的 "*" 表示查询应在 cities 以及继承层次中位于 cities 之下的所有类上执行。我们已经讨论过的许多命令—— SELECT、UPDATE 和 DELETE——都支持这种 "*" 记法,其他命令如 ALTER TABLE 也是如此。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。