Documentation PostgreSQL 8.3.23 > Langage SQL > Définition des données > Gestion des dépendances | |
Autres objets de la base de données | Manipulation de données |
Lorsque des structures de base complexes sont créées qui impliquent beaucoup de tables avec des contraintes de clés étrangères, des vues, des déclencheurs, des fonctions, etc., un réseau de dépendances entre les objets est implicitement créé. 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™ s'assure qu'un objet dont d'autres objets dépendent ne peut pas être supprimé. Ainsi, toute tentative de suppression de la table des produits utilisée dans la Section 5.3.5, « Clés étrangères », sachant que la table des commandes en dépend, lève 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.
ou en français :
DROP TABLE produits; NOTICE: la contrainte commandes_no_produit_fkey sur la table commandes dépend de la table produits ERREUR: la table produits ne peut pas être supprimée, car d'autre objets en dépendent HINT: Utiliser DROP ... CASCADE pour supprimer également les objets dépendants.
Le message d'erreur contient un indice utile : pour ne pas avoir à supprimer individuellement chaque objet dépendant, on peut lancer
DROP TABLE produits CASCADE;
et tous les objets dépendants sont ainsi effacés. Dans ce cas, la table des commandes n'est pas supprimée, mais seulement la contrainte de clé étrangère. (Pour vérifier ce que fait DROP ... CASCADE, on peut lancer DROP sans CASCADE et lire les messages NOTICE.)
Toutes les commandes de suppression dans PostgreSQL™ supportent l'utilisation de CASCADE. La nature des dépendances est évidemment fonction de la nature des objets. On peut aussi écrire RESTRICT au lieu de CASCADE pour obtenir le comportement par défaut, à savoir interdire les suppressions d'objets dont dépendent d'autres objets.
D'après le standard SQL, il est nécessaire d'indiquer RESTRICT ou CASCADE. Aucun système de base de donnée ne force cette règle, en réalité, mais le choix du comportement par défaut, RESTRICT ou CASCADE, varie suivant le système.
Les dépendances de contraintes de clés étrangères et de colonnes serial des versions de PostgreSQL™ antérieures à 7.3 ne sont pas maintenues ou créées pendant le processus de mise à jour. Tout autre type de dépendance est proprement créé pendant une mise à jour à partir d'une base de données antérieure à la 7.3.