【发布时间】:2011-12-31 18:00:28
【问题描述】:
这是枚举类型的定义:
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 约束,也没有明确使用事务。
我试图用谷歌搜索解决方案,但我只能找到如何更改枚举类型本身的问题,而不是列的值。
【问题讨论】:
-
两种形式都在这里工作。编辑您的问题以包含 CREATE TABLE 语句和实际的错误消息。 (复制和粘贴;不要重新输入。)
-
好奇 - 在执行完 UPDATE 语句后,您是否提交了事务?
-
@BobJarvis:PostgreSQL 默认以自动提交模式运行。我引用chapter "Transations" in the manual:
If you do not issue a BEGIN command, then each individual statement has an implicit BEGIN and (if successful) COMMIT wrapped around it. -
可能的解释包括:
RULE或TRIGGER阻止更新。 -
@tuope:您使用的是哪个 PostgreSQL 版本?您的示例适用于 9.1
标签: postgresql enums