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

Error on ALTER TYPE in postgres relation does not exist

使用以下内容:

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

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 ...

您可以将 ENUM 重命名为不同的名称,然后使用更新的字段重新创建所需的 ENUM,并将 table 列的引用更改为新的 ENUM。

这里是 Fiddle - http://sqlfiddle.com/#!17/9b9ed/3

感谢https://www.munderwood.ca/index.php/2015/05/28/altering-postgresql-columns-from-one-enum-to-another/