2 つのクラスを作ってみます。capitals クラスは、cities(市)で もある州都についての情報を持ちます。当然のことに、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 属性の型は、
Postgres 固有の 可変長 ASCII 文字列
用の text 型です。population 属性の型は、
Postgres 固有のダブル精度浮動小数点
数用の float 型です。州都はこの他の属性として、そ
の州を示す state 属性を持ちます。
Postgres では、クラスは 0 個以上のク
ラスを継承でき、問い合わせは、クラスの全インスタンス、または、
クラスとそれを継承する全てのインスタンスのどちらも参照できます。
Note: 継承の階層は実際には非循環性有向グラフです。
SELECT name, altitude
FROM cities
WHERE altitude > 500;
+----------+----------+
|name | altitude |
+----------+----------+
|Las Vegas | 2174 |
+----------+----------+
|Mariposa | 1953 |
+----------+----------+ 一方、標高 500ft 以上にある都市を、州都も含んで、全て探し出す 場合の問い合わせは、以下のようになります。
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 といった他のものも同様です。