Учебник PostgreSQL 7.3.3
Всемирная группа разрабочиков PostgreSQL
Copyright © 1996-2002 by Всемирная Группа Разработчиков PostgreSQL
Перевёл с английского Виктор Вислобоков
3.5. Наследование
    Наследование - это концепт из объектно-ориентированных СУБД. Оно
    открывает новые интересные возможности разработки баз данных.
   
    Создайте две таблицы: Таблицу cities (города)
    и таблицу capitals (столицы). Фактически,
    столицы - это тоже города, так что вы можете захотеть получить
    какой-либо способ просматривать неявно и столицы, когда вы смотрите
    список всех городов. Если вы действительно сообразительны вы можете
    реализовать например такую схему:
CREATE TABLE capitals (
  name       text,
  population real,
  altitude   int,    -- (in ft)
  state      char(2)
);
CREATE TABLE non_capitals (
  name       text,
  population real,
  altitude   int     -- (in ft)
);
CREATE VIEW cities AS
  SELECT name, population, altitude FROM capitals
    UNION
  SELECT name, population, altitude FROM non_capitals;
    Это хорошо работает, когда вы создаете запросы для просмотра, но
    это безобразно, когда вам нужно обновить в нескольких записях,
    например, поле name.
   
   Лучшим решением является:
CREATE TABLE cities (
  name       text,
  population real,
  altitude   int     -- (in ft)
);
CREATE TABLE capitals (
  state      char(2)
) INHERITS (cities);
   
    В данном случае, строки в таблице capitals
    наследуют все колонки (name,
    population и altitude) от
    родительской таблицы cities.
    Тип колонки name это
    text - один из родных типов
    PostgreSQL для символьных строк переменной
    длины. Столицы штатов имеют дополнительную колонку state, которая
    показывает штат. В PostgreSQL таблица
    может наследовать и от нескольких других таблиц.
   
    Например, следующий запрос находит имена всех городов, включая
    столицы штатов, которые находятся на высоте свыше 500 футов:
SELECT name, altitude
  FROM cities
  WHERE altitude > 500;
    запрос возвращает:
    
   name    | altitude
-----------+----------
 Las Vegas |     2174
 Mariposa  |     1953
 Madison   |      845
(3 rows)
    
   
    С другой стороны, следующий запрос находит все города которые не
    являются столицами штатов и находятся на высоте выше 500 футов:
SELECT name, altitude
    FROM ONLY cities
    WHERE altitude > 500;
   name    | altitude
-----------+----------
 Las Vegas |     2174
 Mariposa  |     1953
(2 rows)
   
    Здесь ONLY перед cities
    означает, что запрос должен быть запущен только для таблицы
    cities, а не для таблиц ниже
    cities в иерархии наследования. Многие из тех
    команд, которые мы рассмотрели --
    SELECT, UPDATE и
    DELETE -- поддерживают нотацию ONLY.