Ви видаляєте (видаляєте) типи перерахунків, як і будь-який інший тип, за допомогою DROP TYPE
:
DROP TYPE admin_level1;
Чи можливо, ви насправді запитуєте про те, як видалити окреме значення з типу enum ? Якщо так, ви не можете. Не підтримується :
Хоча enum
типи призначені насамперед для статичних наборів значень, існує підтримка додавання нових значень до існуючого типу enum та перейменування значень (див. ALTER TYPE
). Існуючі значення не можуть бути вилучені з типу enum, а також не можна змінювати порядок сортування таких значень, окрім випадання та повторного створення типу enum.
Ви повинні створити новий тип без значення, перетворити всі існуючі вживання старого типу для використання нового типу, а потім скинути старий тип.
Напр
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;
drop type admin_level1
?