Você exclui (elimina) tipos de enum como qualquer outro tipo, com DROP TYPE
:
DROP TYPE admin_level1;
É possível que você esteja realmente perguntando sobre como remover um valor individual de um tipo de enum ? Se sim, você não pode. Não é compatível :
Embora os enum
tipos sejam principalmente destinados a conjuntos de valores estáticos, há suporte para adicionar novos valores a um tipo de enum existente e para renomear valores (consulte Recursos ALTER TYPE
). Os valores existentes não podem ser removidos de um tipo de enum, nem a ordem de classificação de tais valores pode ser alterada, exceto para descartar e recriar o tipo de enum.
Você deve criar um novo tipo sem o valor, converter todos os usos existentes do tipo antigo para usar o novo tipo e, em seguida, eliminar o tipo antigo.
Por exemplo
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
?