ALTER DOMAIN — Modifier la définition d'un domaine
ALTER DOMAINnom{ SET DEFAULTexpression| DROP DEFAULT } ALTER DOMAINnom{ SET | DROP } NOT NULL ALTER DOMAINnomADDcontrainte_de_domaine[ NOT VALID ] ALTER DOMAINnomDROP CONSTRAINT [ IF EXISTS ]nom_de_contrainte[ RESTRICT | CASCADE ] ALTER DOMAINnomRENAME CONSTRAINTnom_de_contrainteTOnouveau_nom_de_contrainteALTER DOMAINnomVALIDATE CONSTRAINTnom_de_contrainteALTER DOMAINnomOWNER TO {nouveau_propriétaire| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER DOMAINnomRENAME TOnouveau_nomALTER DOMAINnomSET SCHEMAnouveau_schémaoùcontrainte_domainevaut : [ CONSTRAINTnom_contrainte] { NOT NULL | CHECK (expression) }
ALTER DOMAIN modifie la définition d'un domaine. Il
existe plusieurs sous-formes :
SET/DROP DEFAULT
Ces formes positionnent ou suppriment la valeur par défaut d'un domaine.
Les valeurs par défaut ne s'appliquent qu'aux commandes
INSERT ultérieures ; les colonnes d'une table qui
utilisent déjà le domaine ne sont pas affectées.
SET/DROP NOT NULL
Ces formes agissent sur l'acceptation ou le rejet des valeurs NULL par un
domaine. SET NOT NULL ne peut être utilisé que si les
colonnes qui utilisent le domaine contiennent des valeurs non nulles.
ADD contrainte_domaine [ NOT VALID ]
Cette forme ajoute une nouvelle contrainte à un domaine.
Lorsqu'une nouvelle contrainte est ajoutée à un
domaine, toutes les colonnes utilisant ce domaine seront vérifiées avec
cette nouvelle contrainte. Cette vérification initiale peut être annulée
en ajoutant l'option NOT VALID lors de l'ajout de la
nouvelle contrainte ; la contrainte pourra à nouveau être activée en
utilisant la commande ALTER DOMAIN ... VALIDATE
CONSTRAINT. Les lignes nouvellement ajoutées ou modifiées sont
toujours vérifiées pour l'ensemble des contraintes, y compris celles
marquées NOT VALID. À noter enfin que l'option
NOT VALID n'est acceptée que pour les contraintes de
type CHECK.
DROP CONSTRAINT [ IF EXISTS ]
Cette forme supprime les contraintes sur un domaine. Si l'option
IF EXISTS est spécifiée et que la contrainte n'existe
pas, aucune erreur n'est retournée. Dans ce cas, un simple message
d'avertissement est retourné.
RENAME CONSTRAINTCette forme modifie le nom de la contrainte d'un domaine.
VALIDATE CONSTRAINT
Cette forme valide une contrainte ajoutée précédemment avec l'option
NOT VALID, c'est-à-dire qu'elle vérifie que les valeurs
de chaque colonne utilisant ce type domaine satisfont la contrainte
spécifiée.
OWNERCette forme change le propriétaire du domaine.
RENAMECette forme modifie le nom du domaine.
SET SCHEMACette forme change le schéma du domaine. Toute contrainte associée au domaine est déplacée dans le nouveau schéma.
Seul le propriétaire du domaine peut utiliser ALTER
DOMAIN. Pour modifier le schéma d'un domaine, le droit
CREATE sur le nouveau schéma est également requis.
Pour modifier le propriétaire, vous devez être capable d'utiliser
SET ROLE vers le nouveau rôle propriétaire, et ce rôle
doit avoir le droit CREATE sur le schéma du domaine.
Ces restrictions assurent
que la modification du propriétaire n'agissent pas au-delà de ce qui est
réalisable en supprimant et en re-créant le domaine. Toutefois, un
superutilisateur peut modifier le propriétaire de n'importe quel domaine.
nomLe nom du domaine à modifier.
contrainte_de_domaineNouvelle contrainte de domaine pour le domaine.
nom_de_contrainteLe nom d'une contrainte à supprimer ou renommer.
NOT VALIDNe vérifie pas la validité de la contrainte appliquée aux valeurs des colonnes existantes.
CASCADELes objets qui dépendent de la contrainte sont automatiquement supprimés, ainsi que tous les objets dépendants de ces objets (voir Section 5.15).
RESTRICTLa contrainte n'est pas supprimée si des objets en dépendent. C'est le comportement par défaut.
nouveau_nomLe nouveau nom du domaine.
nouveau_nom_de_contrainteLe nouveau nom de la contrainte.
nouveau_propriétaireLe nom de l'utilisateur nouveau propriétaire du domaine.
nouveau_schémaLe nouveau schéma du domaine.
Bien que ALTER DOMAIN ADD CONSTRAINT essaie de vérifier
que les données existantes satisfont la nouvelle contrainte, le test n'est
pas absolu, parce que la commande ne peut pas « voir » les lignes
de la table qui sont nouvellement insérées ou mises à jour et dont la
transaction n'est pas encore validée. S'il y a un risque que des opérations
concurrentes puissent insérer des données ne satisfaisant pas la contrainte,
la manière de procéder consiste à ajouter la contrainte avec l'option
NOT VALID, valider (commit) cette commande, attendre
jusqu'à ce que toutes les transactions démarrées avant cette validation aient
terminé, et alors exécuter ALTER DOMAIN VALIDATE
CONSTRAINT pour chercher les données qui violeraient la contrainte.
Cette méthode est fiable parce qu'une fois que la création de contrainte a
fait l'objet d'un commit, il est garanti que les nouvelles transactions sont
soumises à cette contrainte pour toute nouvelle valeur du type domaine.
Actuellement, ALTER DOMAIN ADD CONSTRAINT, ALTER
DOMAIN VALIDATE CONSTRAINT et ALTER DOMAIN SET NOT
NULL échoueront si le domaine nommé ou tout domaine dérivé est
utilisé pour une colonne de type conteneur (type composé, tableau ou
intervalle) dans toute table de la base de données. Il se pourrait que cela
soit amélioré pour vérifier la nouvelle contrainte sur ce type de colonnes
intégrées.
Ajouter une contrainte NOT NULL à un domaine :
ALTER DOMAIN codezip SET NOT NULL;
Supprimer une contrainte NOT NULL d'un domaine :
ALTER DOMAIN codezip DROP NOT NULL;
Ajouter une contrainte de vérification à un domaine :
ALTER DOMAIN codezip ADD CONSTRAINT verif_zip CHECK (char_length(VALUE) = 5);
Supprimer une contrainte de vérification d'un domaine :
ALTER DOMAIN codezip DROP CONSTRAINT verif_zip;
Pour renommer une contrainte de vérification d'un domaine :
ALTER DOMAIN codezip RENAME CONSTRAINT verif_zip TO zip_verif;
Déplacer le domaine dans un schéma différent :
ALTER DOMAIN zipcode SET SCHEMA customers;
ALTER DOMAIN se conforme au standard
SQL, à l'exception des variantes OWNER,
RENAME, SET SCHEMA et VALIDATE
CONSTRAINT, qui sont des extensions
PostgreSQL. L'option NOT VALID
de la variante ADD CONSTRAINT est elle-aussi une extension
de PostgreSQL.