Chapitre 6. Fonctionnalités avancées de PostgreSQL

Table des matières
Héritage
Valeurs non-atomiques
Time travel
Fonctionnalités avancées supplémentaires

Nous avons présenté les bases de l'utilisation de Postgres pour accéder à vos données, nous allons maintenant examiner certaines fonctionnalités qui distinguent Postgres des serveurs traditionnels. Ces fonctionnalités incluent l'héritage, l'historique des valeurs (time travel), et les valeurs de données non-atomiques (attributs rang- et set-valued).

Héritage

[1]

Créons deux classes : cities et capitals (capitales). Cette dernière est destinée aux capitales d'états qui sont aussi des villes. Naturellement, la classe "capitals" héritera de la classe "cities".
CREATE TABLE cities (
    name            text,
    population      float,
    altitude        int            -- (in ft)
);

CREATE TABLE capitals (
    state           char2
) INHERITS (cities);
Dans ce cas la classe "capitals" hérite de tous les attributs (nom, population, et altitude) de son parent "villes". Le type de l'attribut "name" est text, un type Postgres natif destiné aux chaînes de longueur variable. Le type de l'attribut population est float, un type natif Postgres de représentation des nombres à décimaux. Les capitales d'état ont un attribut supplémentaire, "state", qui contient le nom de l'état où elles se trouvent. Dans Postgres une classe peut hériter de zéro ou plus autres classes, et une requête peut référencer toutes les instances d'une classe ou bien toutes les instances d'une classe plus tous ses descendants.

Note

La hiérarchie héritage est un graphe acyclique direct.

Par exemple, la requête suivante trouve toutes les villes qui sont situées à une altitude de 500 pieds ou plus haut :
SELECT name, altitude
    FROM cities
    WHERE altitude > 500;

+----------+----------+
|name      | altitude |
+----------+----------+
|Las Vegas | 2174     |
+----------+----------+
|Mariposa  | 1953     |
+----------+----------+

Autrement dit, pour trouver les noms de toutes les villes, incluant les capitales d'état, qui sont situées à une altitude supérieure à 500 pieds, la requête est :
SELECT c.name, c.altitude
    FROM cities* c
    WHERE c.altitude > 500;
qui retourne :
+----------+----------+
|name      | altitude |
+----------+----------+
|Las Vegas | 2174     |
+----------+----------+
|Mariposa  | 1953     |
+----------+----------+
|Madison   | 845      |
+----------+----------+
Le "*" placé dans la requête après "cities" indique que la requête sera lancée sur les villes et toutes les classes au-dessous des villes dans la hiérarchie héritage. Beaucoup de commandes dont nous avons déjà traité (select, update et delete) gèrent cette notation "*", ainsi que d'autres, comme alter.

Notes

[1]

N.d.T. L'héritage est la transmission automatique des propriétés d'une classe de base vers une sous-classe.