2011-12-31 4 views
1

Telle est la définition du type énuméré:PostgreSQL: changer une colonne de type ENUM

CREATE TYPE khstate AS ENUM ('none', 'form', 'test', 'finished'); 

Maintenant, dans une table de base de données J'ai une ligne avec des id '(type SERIAL) colonnes et « état » (tapez khstate). La valeur de la colonne 'id' est 100004, et la valeur de la colonne 'state' est 'none'. Comment puis-je le changer pour, par exemple, «former»? La définition de la table est la suivante.

CREATE TABLE IF NOT EXISTS khs ( 
    id SERIAL UNIQUE, 
    state khstate DEFAULT 'none', 
    PRIMARY KEY (id) 
); 

J'ai essayé des requêtes telles que

UPDATE tablename SET state = 'form' WHERE id = 100004; 

ERREUR: valeur d'entrée non valide pour ENUM khstate: "forme"

UPDATE tablename SET state = 'form'::khstate WHERE id = 100004; 

ERREUR: valeur d'entrée non valide pour ENUM khstate: « forme "

mais sans succès. J'utilise le dernier BitNami LAPPstack, donc la version de PostgreSQL est 9.1.1.

Je n'ai ajouté aucune contrainte RULE ou TRIGGER, et je n'ai pas utilisé de transactions explicitement.

J'ai essayé de trouver une solution à google, mais tout ce que j'ai pu trouver, ce sont des questions sur la façon de changer le type enum lui-même, plutôt que sur la valeur d'une colonne.

+0

"mais en vain." veux dire? –

+2

Les deux formes fonctionnent ici. Modifiez votre question pour inclure l'instruction CREATE TABLE et le message d'erreur réel. (Copiez et collez, ne retapez pas.) –

+0

Curiosité - après avoir exécuté vos instructions UPDATE, avez-vous commis les transactions? –

Répondre

2

Le message d'erreur indique que 'form' n'est pas une valeur enregistrée pour votre type d'enum khstate.

Je remarque également que dans votre question vous créez une table nommée khs, mais l'exemple UPDATE utilise plutôt tablename.

Il peut y avoir un mélange de tables, de schémas ou de bases de données. Diagnostiquer votre problème en exécutant cette requête dans la même session que vous donne le message d'erreur:

SELECT enum_range(NULL::khstate) 

Est-ce que vous voyez form dans le tableau de valeurs? Je m'attends, vous ne le faites pas.

En savoir plus sur enum support functions in the manual.

+0

Merci beaucoup! Je suis extrêmement gêné que la valeur 'forme' ne soit pas, en effet, listée parmi le tableau des valeurs. J'avais fait une faute de frappe. :-(Désolé pour le dérangement". – tuope

Questions connexes