Typy výčtu smažete (vypustíte) jako jakýkoli jiný typ pomocí DROP TYPE
:
DROP TYPE admin_level1;
Je možné, že se vlastně ptáte na to, jak odstranit jednotlivou hodnotu z typu enum ? Pokud ano, nemůžete. Není podporováno:
Ačkoli
enum
typy jsou primárně určeny pro statické sady hodnot, existuje podpora pro přidávání nových hodnot do existujícího typu výčtu a pro přejmenování hodnot (vizALTER TYPE
). Existující hodnoty nelze z typu výčtu odstranit ani nelze změnit řazení těchto hodnot, kromě vypuštění a opětovného vytvoření výčtového typu.
Musíte vytvořit nový typ bez hodnoty, převést všechna existující použití starého typu na nový typ a poté starý typ vypustit.
Např.
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;