PostgreSQLLa base de données la plus sophistiquée au monde.

5.11. Gestion des dépendances

Lorsque vous créez des structures de base complexes impliquant beaucoup de tables avec des contraintes de clés étrangères, des vues, des déclencheurs, des fonctions, etc, vous créez implicitement un filet de dépendances entre les objets. Par exemple, une table avec une contrainte de clé étrangère dépend de la table à laquelle elle fait référence.

Pour garantir l'intégrité de la structure entière de la base, PostgreSQL™ vérifie que vous ne pouvez pas effacer des objets dont d'autres objets dépendent. Par exemple, la tentative d'effacer la table des produits que nous avons utilisé dans la Section 5.3.5, « Clés étrangères », avec la table des commandes qui en dépend, donnera un message d'erreur comme celui-ci :

DROP TABLE produits;

NOTICE:  constraint commandes_no_produit_fkey on table commandes depends on table
produits
ERROR:  cannot drop table produits because other objects depend on it
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

Le message d'erreur contient un indice utile : si vous ne souhaitez pas effacer les objets dépendants individuellement, vous pouvez lancer

DROP TABLE produits CASCADE;

et tous les objets seront effacés. Dans ce cas, cela n'effacera pas la table des commandes mais seulement la contrainte de clé étrangère (si vous voulez vérifier ce que DROP ... CASCADE fera, lancez DROP sans CASCADE et lisez les messages NOTICE).

Toutes les commandes de suppression dans PostgreSQL™ supportent l'utilisation de CASCADE. Bien sûr, la nature des dépendances varie avec la nature des objets. Vous pouvez aussi écrire RESTRICT au lieu de CASCADE pour obtenir le comportement par défaut qui est d'empêcher les suppressions d'objets sur lesquelles dépendent d'autres objets.

[Note]

Note

D'après le standard SQL, spécifier RESTRICT ou CASCADE est requis. Aucun système de base de donnée ne force cette règle de cette manière actuellement mais le choix du comportement par défaut, RESTRICT ou CASCADE, varie suivant le système.

[Note]

Note

Les dépendances de contraintes de clés étrangères et de colonnes en série des versions de PostgreSQL™ antérieures à 7.3 ne seront pas maintenues ou créées pendant le processus de mise à jour. Tout autre type de dépendance sera proprement créé pendant une mise à jour à partir d'une base de données antérieure à la 7.3.