PostgreSQL:更改枚举类型的列

时间:2011-12-31 18:00:28

标签: postgresql enums

这是枚举类型的定义:

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约束,也没有明确使用事务。

我尝试谷歌寻求解决方案,但我能找到的只是如何更改枚举类型本身的问题,而不是列的值。

1 个答案:

答案 0 :(得分:2)

错误消息表明'form'不是枚举类型khstate的注册值。

我还注意到,在您的问题中,您创建了一个名为khs的表,但UPDATE示例改为使用tablename

表格,模式或数据库可能会混淆。通过在提供错误消息的同一会话中运行此查询来诊断您的问题:

SELECT enum_range(NULL::khstate)

您是否在值数组中看到form?我希望,你没有。

有关enum support functions in the manual的更多信息。