使用以下内容:
CREATE TYPE user_types AS ENUM ('it', 'accounting', 'processes');
CREATE TABLE my_users
(
my_user_id integer NOT NULL,
my_user_name text NOT NULL,
my_user_type user_types
)
我想更改其中一个用户类型:
ALTER TYPE user_types RENAME ATTRIBUTE it TO softwaredev CASCADE;
我收到错误:
ERROR: relation "user_types" does not exist
SQL state: 42P01
我尝试添加引号和反引号,但这并没有帮助。我在这里写下的例子不是确切的代码,我的类型有31个字符,但我不认为我的类型的长度是问题。
我使用的是postgres版本9.6.2
答案 0 :(得分:3)
ALTER TYPE ... RENAME ATTRIBUTE
仅适用于复合类型,不适用于ENUM
类型。
虽然有一种方法可以为这种类型(ALTER TYPE ... ADD VALUE 'new_value'
)添加新条目,但是没有支持的方法来删除或重命名枚举条目。
如果您不害怕乱糟糟的目录,可以尝试以超级用户身份使用:
UPDATE pg_enum
SET enumlabel = 'softwaredev'
WHERE enumtypid = 'user_types'::regtype
AND enumlabel = 'it';
从PostgreSQL v10开始,您可以使用
ALTER TYPE ... RENAME VALUE ... TO ...
答案 1 :(得分:0)
您可以将 ENUM 重命名为不同的名称,然后使用更新的字段重新创建所需的 ENUM,并将表列的引用更改为新的 ENUM。
这是一把小提琴 - http://sqlfiddle.com/#!17/9b9ed/3
归功于https://www.munderwood.ca/index.php/2015/05/28/altering-postgresql-columns-from-one-enum-to-another/