PostgreSQL: изменение столбца типа enum - PullRequest
1 голос
/ 31 декабря 2011

Это определение перечислимого типа:

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

Теперь в таблице базы данных у меня есть строка с столбцами id (тип SERIAL) и state (тип khstate). Значение столбца «id» равно 100004, а значением столбца «state» является «none». Как мне изменить его, скажем, на «форму»? Таблица определена следующим образом.

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

Я пробовал такие запросы, как

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

ОШИБКА: неверное значение ввода для перечисления khstate: "форма"

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

ОШИБКА: неверное входное значение для перечисления khstate: "форма"

но безуспешно. Я использую последний BitNami LAPPstack , поэтому версия PostgreSQL - 9.1.1.

Я не добавил никаких ограничений RULE или TRIGGER, а также не использовал транзакции явно.

Я пытался найти решение в Google, но все, что я мог найти, это вопросы о том, как изменить сам тип перечисления, а не значение столбца.

1 Ответ

2 голосов
/ 01 января 2012

Сообщение об ошибке указывает, что 'form' не является зарегистрированным значением для вашего типа перечисления khstate.

. Я также заметил, что в вашем вопросе вы создаете таблицу с именем khs, но пример ОБНОВЛЕНИЯвместо этого используется tablename.

Может быть сочетание таблиц, схем или баз данных.Для диагностики вашей проблемы запустите этот запрос в том же сеансе, который выдает сообщение об ошибке:

SELECT enum_range(NULL::khstate)

Видите ли вы form в массиве значений?Я ожидаю, что вы этого не сделаете.

Подробнее о функциях поддержки enum в руководстве .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...