ALTER TYPE — Modifier la définition d'un type
ALTER TYPEnom
action
[, ... ] ALTER TYPEnom
OWNER TO {nouveau_propriétaire
| CURRENT_USER | SESSION_USER } ALTER TYPEnom
RENAME ATTRIBUTEnom_attribut
TOnouveau_nom_attribut
[ CASCADE | RESTRICT ] ALTER TYPEnom
RENAME TOnouveau_nom
ALTER TYPEnom
SET SCHEMAnouveau_schéma
ALTER TYPEnom
ADD VALUE [ IF NOT EXISTS ]nouvelle_valeur_enumérée
[ { BEFORE | AFTER }valeur_enumérée
] ALTER TYPEnom
ADD VALUE [ IF NOT EXISTS ]nouvelle_valeur_enum
[ { BEFORE | AFTER }valeur_enum_voisine
] ALTER TYPEnom
RENAME VALUEvaleur_enum_existante
TOnouvelle_valeur_enum
oùaction
fait partie de : ADD ATTRIBUTEnom_attribut
type_de_donnée
[ COLLATEcollationnement
] [ CASCADE | RESTRICT ] DROP ATTRIBUTE [ IF EXISTS ]nom_attribut
[ CASCADE | RESTRICT ] ALTER ATTRIBUTEnom_attribut
[ SET DATA ] TYPEtype_de_donnée
[ COLLATEcollationnement
] [ CASCADE | RESTRICT ]
ALTER TYPE
modifie la définition d'un type existant.
Les variantes suivantes existent :
ADD ATTRIBUTE
Cette forme ajoute un nouvel attribut à un type composite, avec la même syntaxe que CREATE TYPE.
DROP ATTRIBUTE [ IF EXISTS ]
Cette forme supprime un attribut d'un type composite.
Si IF EXISTS
est spécifié et que l'attribut
cible n'existe pas, aucun message d'erreur ne sera émis, mais
remplacé par une alerte de niveau NOTICE.
SET DATA TYPE
Cette forme modifie le type d'un attribut d'un type composite.
OWNER
Cette forme modifie le propriétaire d'un type.
RENAME
Cette forme permet de modifier le nom du type ou celui d'un attribut d'un type composite.
SET SCHEMA
Cette forme déplace le type dans un autre schéma.
ADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]
Cette forme ajoute une valeur à une énumération. L'emplacement de la
nouvelle valeur dans l'énumération peut être spécifié comme étant avant
(BEFORE
) ou après (AFTER
) une des
valeurs existantes. Dans le cas contraire, le nouvel élément est ajouté
à la fin de la liste de valeurs.
Si IF NOT EXISTS
est précisé, l'existence d'une valeur
de même nom ne constitue par une erreur : un message d'avertissement
sera envoyé mais aucune action ne sera prise. Dans le cas contraire, une
erreur est revnoyée si la nouvelle valeur est déjà présente.
RENAME VALUE
Renomme une valeur d'un type énumération. La place de la valeur dans l'ordre de l'énumération n'est pas affecté. Une erreur sera renvoyée if la valeur spécifiée n'est pas présente ou si le nouveau nom est déjà présent.
Les actions ADD ATTRIBUTE
, DROP
ATTRIBUTE
, et ALTER ATTRIBUTE
peuvent être combinées dans une liste de modifications multiples
à appliquer en parallèle. Il est ainsi possible d'ajouter et/ou modifier
plusieurs attributs par une seule et même commande.
Seul le propriétaire du type peut utiliser ALTER TYPE
.
Pour modifier le schéma d'un type,
le droit CREATE
sur le nouveau schéma est 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 type (ces
restrictions assurent que la modification du propriétaire ne va pas au-delà de ce qui
est possible par la suppression et la recréation du type ; toutefois, un superutilisateur peut modifier
le propriétaire de n'importe quel type).
Pour ajouter un attribut ou pour modifier le type d'un attribut, vous devez
aussi avoir le droit USAGE
sur le type.
nom
Le nom du type à modifier (éventuellement qualifié du nom du schéma).
nouveau_nom
Le nouveau nom du type.
nouveau_propriétaire
Le nom du nouveau propriétaire du type.
nouveau_schema
Le nouveau schéma du type.
nom_attribut
Le nom de l'attribut à ajouter, modifier ou supprimer.
nouveau_nom_attribute
Le nouveau nom de l'attribut à renommer.
type_de_donnée
Le type de donnée pour l'attribut à ajouter ou modifier.
nouvelle_valeur_enumérée
La nouvelle valeur à ajouter à la liste d'un type, ou le nouveau nom à être donné à une valeur existante. . Comme pour tous les littéraux, la valeur devra être délimitée par des guillemets simples.
valeur_enumérée_voisine
La valeur existante d'une énumération par rapport à laquelle la nouvelle valeur doit être ajoutée (permet de déterminer l'ordre de tri du type énuméré). Comme pour tous les littéraux, la valeur existante devra être délimitée par des guillemets simples.
existing_enum_value
La valeur existante de l'énumération qui doit être renommée. Comme toutes les littéraux d'énumération , elle doit être délimitée par des guillemets simples.
CASCADE
Propage automatiquement les opération sur les tables typées du type étant modifié, ainsi que leur descendants.
RESTRICT
Refuse les opérations si le type étant modifié est le type d'une table typée. C'est le comportement par défaut.
ALTER TYPE ... ADD VALUE
ne peut pas être exécuté à
l'intérieur d'un bloc de transaction.
Les comparaisons faisant intervenir une valeur ajoutée à postériori peuvent
quelquefois s'avérer plus lentes que celles portant uniquement sur les valeurs
originales d'un type énuméré. Ce ralentissement ne devrait toutefois intervenir que si
la position de la nouvelle valeur a été spécifiée en utilisant les options BEFORE
ou AFTER
, au lieu d'insérer la nouvelle valeur en fin de liste.
Ce ralentissement peut également se produire, bien que la nouvelle valeur ait été insérée en fin d'énumération,
en cas de « bouclage » du compteur des OID depuis la création du
type énuméré. Le ralentissement est généralement peu significatif ; mais s'il s'avère
important, il est toujours possible de retrouver les performances optimales par une
suppression / recréation du type énuméré, ou encore par sauvegarde et rechargement de
la base.
Pour renommer un type de données :
ALTER TYPE courrier_electronique RENAME TO courriel;
Donner la propriété du type courriel
à joe
:
ALTER TYPE courriel OWNER TO joe;
Changer le schéma du type courriel
en clients
:
ALTER TYPE courriel SET SCHEMA clients;
Ajouter un nouvel attribut à un type composite :
ALTER TYPE compfoo ADD ATTRIBUTE f3 int;
Ajouter une nouvelle valeur à une énumération, en spécifiant sa position de tri :
ALTER TYPE colors ADD VALUE 'orange' AFTER 'red';
Pour renommer une valeur d'une énumération :
ALTER TYPE colors RENAME VALUE 'purple' TO 'mauve';
Les variantes permettant d'ajouter et supprimer un attribut font partie du standard SQL ; les autres variantes sont des extensions spécifiques à PostgreSQL.