Documentation PostgreSQL 9.4.26 > Référence > Commandes SQL > ALTER TYPE | |
ALTER TRIGGER | ALTER USER |
ALTER TYPE — Modifier la définition d'un type
ALTER TYPE nom action [, ... ] ALTER TYPE nom OWNER TO nouveau_propriétaire ALTER TYPE nom RENAME ATTRIBUTE nom_attribut TO nouveau_nom_attribut [ CASCADE | RESTRICT ] ALTER TYPE nom RENAME TO nouveau_nom ALTER TYPE nom SET SCHEMA nouveau_schémaALTER TYPE nom ADD VALUE [ IF NOT EXISTS ] nouvelle_valeur_enumérée [ { BEFORE | AFTER } valeur_enumérée ] où action fait partie de : ADD ATTRIBUTE nom_attributtype_de_donnée [ COLLATE collationnement ] [ CASCADE | RESTRICT ] DROP ATTRIBUTE [ IF EXISTS ] nom_attribut [ CASCADE | RESTRICT ] ALTER ATTRIBUTE nom_attribut [ SET DATA ] TYPE type_de_donnée [ COLLATE collationnement ] [ CASCADE | RESTRICT ]
ALTER TYPE modifie la définition d'un type existant. Les variantes suivantes existent :
Cette forme ajoute un nouvel attribut à un type composite, avec la même syntaxe que CREATE TYPE(7).
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.
Cette forme modifie le type d'un attribut d'un type composite.
Cette forme modifie le propriétaire d'un type.
Cette forme permet de modifier le nom du type ou celui d'un attribut d'un type composite.
Cette forme déplace le type dans un autre schéma.
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.
Autorise la propagation automatique de la modification vers les tables typées concernées par le type modifié, ainsi que leurs éventuels descendants.
Interdit l'opération si le type est déjà référencé par des tables typées. Il s'agit du comportement par défaut.
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.
Le nom du type à modifier (éventuellement qualifié du nom du schéma).
Le nouveau nom du type.
Le nom du nouveau propriétaire du type.
Le nouveau schéma du type.
Le nom de l'attribut à ajouter, modifier ou supprimer.
Le nouveau nom de l'attribut à renommer.
Le type de donnée pour l'attribut à ajouter ou modifier.
La nouvelle valeur à ajouter à la liste d'un type énuméré. Comme pour tous les littéraux, la valeur devra être délimitée par des guillements simples.
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 guillements simples.
ALTER TYPE ... ADD VALUE (cette forme qui ajoute une nouvelle valeur à une énumération) ne peut être exécutée à l'intérieur d'une 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';