postgres关系中的ALTER TYPE错误不存在

时间:2017-05-29 13:09:39

标签: postgresql postgresql-9.6

使用以下内容:

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

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/