Suppression de schémas
Suppression⚓
DROP SCHEMA %nom_schema [ CASCADE ] ;
ou
UPDATE z_asgard.gestion_schema_usr SET bloc = 'd' WHERE nom_schema = '%nom_schema' ; UPDATE z_asgard.gestion_schema_usr SET creation = False WHERE nom_schema = '%nom_schema' ;
Effacement de la table de gestion⚓
DELETE FROM z_asgard.gestion_schema_usr WHERE nom_schema = '%nom_schema' ;
Réglementaire : Principe⚓
Pour des raisons de sécurité, la bascule directe du champ creation
de True
à False
dans la vue utilisateur[1] est interdite (provoque une erreur).
Cette bascule est par contre réalisée automatiquement par ASGARD lorsqu’une commande DROP SCHEMA
est lancée, de même que pour toute autre méthode de suppression extérieure à ASGARD.
Exemple :
Suppression du schéma w_snow
et de tous les objets qu’il contient par une commande directe :
DROP SCHEMA w_snow CASCADE ;
NOTICE: … La suppression du schéma w_snow a été enregistrée dans la table de gestion (creation = False).
DROP SCHEMA
Physiquement, le schéma est détruit, mais il reste enregistré avec creation
valant False
dans la table de gestion[2] (schéma inactif[3]), pour permettre une hypothétique recréation. Ce système permet notamment de ne pas avoir à redéfinir les profils de droits et les niveaux d'arborescence en cas de sauvegarde/restauration d’un schéma.
Pour obtenir le même résultat en travaillant uniquement dans la table de gestion, il faudra passer d’abord l’attribut bloc
du schéma à la valeur « d », qui représente la « corbeille[4] ». Une fois le schéma dans la corbeille, il devient possible basculer creation
sur False
. ASGARD exécute alors un DROP SCHEMA CASCADE
pour supprimer physiquement le schéma et tous les objets qu’il contient. C'est cette méthode qui est mise en oeuvre par AsgardManager.
Exemple :
Suppression du schéma w_snow
et de tous les objets qu’il contient via la table de gestion.
Premier temps, mise à la corbeille :
UPDATE z_asgard.gestion_schema_usr
SET bloc = 'd'
WHERE nom_schema = 'w_snow' ;
NOTICE: [table de gestion] Le schéma w_snow a été mis à la corbeille (bloc = 'd').
HINT: Si vous basculez creation sur False, le schéma et son contenu seront automatiquement supprimés.
UPDATE 1
Second temps, suppression par bascule de creation
sur False
:
UPDATE z_asgard.gestion_schema_usr
SET creation = False
WHERE nom_schema = 'w_snow' ;
NOTICE: ... La suppression du schéma w_snow a été enregistrée dans la table de gestion (creation = False).
NOTICE: ... Le schéma w_snow a été supprimé.
UPDATE 0
Cette dernière commande renverra toujours « UPDATE 0 », comme si elle n’avait eu aucun effet, même si un ou plusieurs enregistrements ont bien été modifiés en pratique (comme en attestent les messages). En effet, les mécanismes d’ASGARD font que l’UPDATE
lancé par l’utilisateur est remplacé par une commande de suppression du schéma. C’est cette dernière qui entraînera la mise à jour effective du champ creation
. En lui-même, le premier UPDATE
n’affecte donc directement aucun enregistrement de la table de gestion.
Remarque :
Dans tous les cas les commandes de mise à la corbeille et de suppression ne peuvent être lancées que par un membre de g_admin[6]
ou du rôle producteur[5] du schéma.
Si on le souhaite et si le schéma ne fait pas partie de la nomenclature nationale[7] (nomenclature
vaut False
), l’enregistrement du schéma peut ensuite être retiré de la table de gestion. Là aussi, seuls les membres de g_admin
et du rôle producteur du schéma sont habilités à réaliser cette opération.
Exemple :
Effacement du schéma w_snow
de la table de gestion :
DELETE FROM z_asgard.gestion_schema_usr
WHERE nom_schema = 'w_snow';
DELETE 1
Il va sans dire que seuls les schémas inactifs[3] peuvent être effacés de la table de gestion par une commande DELETE
. Retirer un schéma de la table de gestion sans le supprimer physiquement de la base de données, c'est-à-dire le déréférencer[8], peut être réalisé grâce à la fonction asgard_sortie_gestion_schema.