Avis de non-responsabilité : Je n'ai pas essayé cette solution, elle peut donc ne pas fonctionner ;-)
Vous devriez regarder pg_enum
. Si vous voulez seulement changer l'étiquette d'un ENUM existant, un simple UPDATE fera l'affaire.
Pour ajouter une nouvelle valeur ENUM :
- Insérez d'abord la nouvelle valeur dans
pg_enum
. Si la nouvelle valeur doit être la dernière, c'est fini.
- Si ce n'est pas le cas (vous avez besoin d'une nouvelle valeur ENUM entre les valeurs existantes), vous devrez mettre à jour chaque valeur distincte dans votre table, en allant de la plus haute à la plus basse...
- Il vous suffira alors de les renommer dans le fichier
pg_enum
dans l'ordre inverse.
Illustration
Vous disposez de l'ensemble d'étiquettes suivant :
ENUM ('enum1', 'enum2', 'enum3')
et que vous voulez obtenir :
ENUM ('enum1', 'enum1b', 'enum2', 'enum3')
alors :
INSERT INTO pg_enum (OID, 'newenum3');
UPDATE TABLE SET enumvalue TO 'newenum3' WHERE enumvalue='enum3';
UPDATE TABLE SET enumvalue TO 'enum3' WHERE enumvalue='enum2';
alors :
UPDATE TABLE pg_enum SET name='enum1b' WHERE name='enum2' AND enumtypid=OID;
Et ainsi de suite...