2011-12-31 172 views
1

这是枚举类型的定义:PostgreSQL的:改变枚举类型的列

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

现在,在数据库表我有列“ID”(式串行)行和“国家” (类型khstate)。 'id'列的值是100004,'state'列的值是'none'。我如何将它改为“form”?表格定义如下。

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

我曾尝试查询诸如

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

ERROR:无效的输入值用于枚举khstate: “形式”

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

错误:枚举khstate无效的输入值:“形式“

但没有成功。我使用最新的BitNami LAPPstack,所以PostgreSQL的版本是9.1.1。

我还没有添加任何RULE或TRIGGER约束,也没有明确使用事务。

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

+0

“但无济于事。”手段? – 2011-12-31 18:06:44

+2

这两种表格都在这里工作。编辑您的问题以包含CREATE TABLE语句和实际的错误消息。 (复制并粘贴;不要重新输入。) – 2011-12-31 18:19:05

+0

好奇心 - 在执行您的UPDATE语句之后,您是否提交事务? – 2012-01-01 05:12:53

回答

2

错误消息指示'form'不是您的枚举类型khstate的注册值。

我还注意到,在你的问题中,你创建一个名为khs的表,但UPDATE示例使用tablename来代替。

可能会混合使用表,模式或数据库。

SELECT enum_range(NULL::khstate) 

你值的数组中看到form:通过在给你的错误信息相同的会话中运行此查询诊断问题了吗?我期望,你没有。

更多关于enum support functions in the manual

+0

非常感谢!我非常尴尬的是,“形式”价值并不是真正列在价值观之中。我犯了一个错字。 :-( 抱歉,添麻烦了”。 – tuope 2012-01-01 20:09:13