区别于其他传统数据库管理器的特性.这些特性包括:继承,时间跟踪和非定量数值(数组和有值字段)(array-
and set-valued attributes).本节的例子可以在教程目录的
继承
让我们创建两个表.表 capitals 包含各州的首府,同时也是cities表.自然而然,表
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
的双精度浮点数据类型.表 capitals 多一个字段,state,表明首府所在的州.在
Postgres
里,一个表可以从0或更多个其他表继承下来,一个查询可以检索一个表的所有记录,也可以检索一个表和其所有后代的记录.
例如,下面查询将找出所有海拔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.