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;