这是枚举类型的定义:
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的输入值无效:“form”
UPDATE tablename SET state = 'form'::khstate WHERE id = 100004;
错误:枚举khstate的输入值无效:“form”
但没有成功。我使用的是最新的BitNami LAPPstack,因此PostgreSQL的版本是9.1.1。
我没有添加任何RULE或TRIGGER约束,也没有明确使用事务。
我尝试谷歌寻求解决方案,但我能找到的只是如何更改枚举类型本身的问题,而不是列的值。
答案 0 :(得分:2)
错误消息表明'form'
不是枚举类型khstate
的注册值。
我还注意到,在您的问题中,您创建了一个名为khs
的表,但UPDATE示例改为使用tablename
。
表格,模式或数据库可能会混淆。通过在提供错误消息的同一会话中运行此查询来诊断您的问题:
SELECT enum_range(NULL::khstate)
您是否在值数组中看到form
?我希望,你没有。