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' ;

Exemple

Suppression du schéma w_snow et de tous les objets qu’il contient par une commande directe :

1
2
DROP SCHEMA w_snow CASCADE ;
1
2
NOTICE: … La suppression du schéma w_snow a été enregistrée dans la table de gestion (creation = False).
3
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 :

1
2
UPDATE z_asgard.gestion_schema_usr
3
    SET bloc = 'd'
4
    WHERE nom_schema = 'w_snow' ;
1
2
NOTICE: [table de gestion] Le schéma w_snow a été mis à la corbeille (bloc = 'd').
3
HINT: Si vous basculez creation sur False, le schéma et son contenu seront automatiquement supprimés.
4
UPDATE 1

Second temps, suppression par bascule de creation sur False :

1
2
UPDATE z_asgard.gestion_schema_usr
3
    SET creation = False
4
    WHERE nom_schema = 'w_snow' ;
1
2
NOTICE: ... La suppression du schéma w_snow a été enregistrée dans la table de gestion (creation = False).
3
NOTICE: ... Le schéma w_snow a été supprimé.
4
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 :

1
2
DELETE FROM z_asgard.gestion_schema_usr
3
    WHERE nom_schema = 'w_snow';
1
2
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.