如何删除我在 postgresql 中创建的枚举类型值?
create type admin_level1 as enum('classifier', 'moderator', 'god');
例如,我想moderator从列表中删除。
moderator
我似乎在文档上找不到任何东西。
我正在使用 Postgresql 9.3.4。
您可以像任何其他类型一样删除(删除)枚举类型,使用DROP TYPE:
DROP TYPE
DROP TYPE admin_level1;
您是否可能实际上是在询问如何 从枚举类型中删除单个值 ?如果是这样,你不能。不支持:
尽管enum类型主要用于静态值集,但支持向现有枚举类型添加新值以及重命名值(请参阅 参考资料ALTER TYPE)。不能从枚举类型中删除现有值,也不能更改这些值的排序顺序,除非删除并重新创建枚举类型。
enum
ALTER TYPE
您必须创建一个没有值的新类型,将旧类型的所有现有用途转换为使用新类型,然后删除旧类型。
例如
CREATE TYPE admin_level1 AS ENUM ('classifier', 'moderator'); CREATE TABLE blah ( user_id integer primary key, power admin_level1 not null ); INSERT INTO blah(user_id, power) VALUES (1, 'moderator'), (10, 'classifier'); ALTER TYPE admin_level1 ADD VALUE 'god'; INSERT INTO blah(user_id, power) VALUES (42, 'god'); -- .... oops, maybe that was a bad idea CREATE TYPE admin_level1_new AS ENUM ('classifier', 'moderator'); -- Remove values that won't be compatible with new definition -- You don't have to delete, you might update instead DELETE FROM blah WHERE power = 'god'; -- Convert to new type, casting via text representation ALTER TABLE blah ALTER COLUMN power TYPE admin_level1_new USING (power::text::admin_level1_new); -- and swap the types DROP TYPE admin_level1; ALTER TYPE admin_level1_new RENAME TO admin_level1;