Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Chapitre 5. Définition des données | Avance rapide | Suivant |
Lorsque vous créez des structures de base complexes impliquant beaucoup de tables avec des contraintes de clés étrangères, des vues, des triggers, 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 base à 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 dont dépendants. Par exemple, la tentative d'effacer la table des produits que nous avons utilisé dans Section 5.3.5, avec la tables des commandes qui en dépend, donnera un message d'erreur comme celui-ci:
DROP TABLE products; NOTICE: constraint orders_product_no_fkey on table orders depends on table products ERROR: cannot drop table products 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 products CASCADE;
et tout 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 sur, 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 : D'après le standard SQL, spécifier l'un de 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 : 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.
Précédent | Sommaire | Suivant |
D'autres Objets Base de Données | Niveau supérieur | Manipulation de données |