↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 6.3
历史版本。 PostgreSQL 6.3 已结束支持。 请参阅 当前版本手册.

第 12 章 继承

我们来创建两个类。capitals 类包含各州首府,它们同时也是城市。自然地,capitals 类应当继承自 cities。

CREATE TABLE cities (
    name            text,
    population      float,
    altitude        int            -- (in ft)
);

CREATE TABLE capitals (
    state           char2
) 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     |
+----------+----------+

另一方面,要找出所有位于海拔 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 也是如此。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.