如何删除在 postgresql 中创建的枚举类型值?
create type admin_level1 as enum('classifier', 'moderator', 'god');
例如。我想删除moderator
从列表中。
我似乎在文档中找不到任何内容。
我正在使用 Postgresql 9.3.4。
您可以像任何其他类型一样删除(删除)枚举类型,使用DROP TYPE http://www.postgresql.org/docs/current/static/sql-droptype.html:
DROP TYPE admin_level1;
有可能你实际上是在问如何从枚举类型中删除单个值?如果是这样,你不能。不支持 https://www.postgresql.org/docs/current/datatype-enum.html:
虽然enum
类型主要用于静态值集,支持向现有枚举类型添加新值以及重命名值(请参阅ALTER TYPE
)。无法从枚举类型中删除现有值,也无法更改此类值的排序顺序,除非删除并重新创建枚举类型。
您必须创建一个不带值的新类型,将旧类型的所有现有用途转换为使用新类型,然后删除旧类型。
E.g.
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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)