ALTER DOMAIN — Modifier la définition d'un domaine
ALTER DOMAINnom
{ SET DEFAULTexpression
| DROP DEFAULT } ALTER DOMAINnom
{ SET | DROP } NOT NULL ALTER DOMAINnom
ADDcontrainte_de_domaine
[ NOT VALID ] ALTER DOMAINnom
DROP CONSTRAINT [ IF EXISTS ]nom_de_contrainte
[ RESTRICT | CASCADE ] ALTER DOMAINnom
RENAME CONSTRAINTnom_de_contrainte
TOnouveau_nom_de_contrainte
ALTER DOMAINnom
VALIDATE CONSTRAINTnom_de_contrainte
ALTER DOMAINnom
OWNER TO {nouveau_propriétaire
| CURRENT_USER | SESSION_USER } ALTER DOMAINnom
RENAME TOnouveau_nom
ALTER DOMAINnom
SET SCHEMAnouveau_schema
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 utilise 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 de domaine
[ NOT VALID ]
Cette forme ajoute une nouvelle contrainte à un domaine avec la même
syntaxe que CREATE DOMAIN.
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 CONSTRAINT
Cette 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 données de chaque colonne utilisant le
domaine satisfont la contrainte spécifiée.
OWNER
Cette forme change le propriétaire du domaine.
RENAME
Cette forme modifie le nom du domaine.
SET SCHEMA
Cette 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 de la fonction d'agrégat peut utiliser
ALTER AGGREGATE
.
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, il faut être un membre direct ou
indirect du 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.
nom
Le nom du domaine à modifier.
contrainte_de_domaine
Nouvelle contrainte de domaine pour le domaine.
nom_de_contrainte
Le nom d'une contrainte à supprimer ou renommer.
NOT VALID
Ne vérifie pas la validité de la contrainte appliquée aux données des colonnes existantes.
CASCADE
Les objets qui dépendent de la contrainte sont automatiquement supprimés, ainsi que tous les objets dépendants de ces objets (voir Section 5.13).
RESTRICT
La contrainte n'est pas supprimée si des objets en dépendent. C'est le comportement par défaut.
nouveau_nom
Le nouveau nom du domaine.
nouveau_nom_de_contrainte
Le nouveau nom de la contrainte.
nouveau_propriétaire
Le nom de l'utilisateur nouveau propriétaire du domaine.
nouveau_schema
Le nouveau schéma du domaine.
Bien que les tentatives de ALTER DOMAIN ADD CONSTRAINT
pour vérifier que les données existantes satisfont la nouvelle contrainte,
cette vérification n'est pas garantie à 100% car la commande ne
« voit » pas les lignes de table rows qui sont en cours
d'insertion ou de mise à jour. S'il existe un risque que des opérations
concurrentes insèrent de mauvaises données, la façon de procéder revient à
ajouter la constrainte en utilisant l'option NOT VALID
,
à valider cette commande, à attendre que tous les transactions commencées
avant ce commit se terminent, et enfin de lancer ALTER DOMAIN
VALIDATE CONSTRAINT
pour vérifier toute donnée ne satisfaisant
pas la contrainte. Cette méthode est fiable parce qu'une fois la contrainte
validée, toutes les nouvelles transactions seront forcées de la respecter
pour les nouvelles valeurs 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 composite 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 contrôle à un domaine :
ALTER DOMAIN codezip ADD CONSTRAINT verif_zip CHECK (char_length(VALUE) = 5);
Supprimer une contrainte de contrôle d'un domaine :
ALTER DOMAIN codezip DROP CONSTRAINT verif_zip;
Pour renommer une contrainte de contrôle 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.