如何删除postgres中的枚举类型值?
·
问题:如何删除postgres中的枚举类型值?
如何删除我在 postgresql 中创建的枚举类型值?
create type admin_level1 as enum('classifier', 'moderator', 'god');
例如。我想从列表中删除moderator。
我似乎在文档上找不到任何东西。
我正在使用 Postgresql 9.3.4。
解答
您可以像任何其他类型一样删除(删除)枚举类型,使用DROP TYPE:
DROP TYPE admin_level1;
您是否可能实际上是在询问如何_从枚举类型中删除单个值_?如果是这样,你不能。不支持:
尽管
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;
更多推荐
所有评论(0)