↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 6.3
历史版本PostgreSQL 6.3 已于 2003 年 3 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

第 5 章 Postgres SQL 的高级特性

在介绍了使用 Postgres SQL 访问数据的基础知识之后,我们现在来讨论 Postgres 区别于传统数据管理器的那些特性。这些特性包括继承、时间旅行以及非原子数据值(数组值和集合值属性)。本节的示例也可以在教程目录的 advance.sql 中找到。(关于如何使用它,请参阅第 4 章。)

5.1. 继承

让我们创建两个类。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 等其他命令都支持这种“*”记法。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。