1. ホーム
  2. データベース

[解決済み】既存のENUM型に新しい値を追加する

2022-04-17 11:42:16

質問

テーブルのカラムで enum という型があります。を更新したい。 enum タイプに、可能な値を追加しました。既存の値は削除せず、新しい値だけを追加したいのです。これを行うための最も簡単な方法は何ですか?

どのように解決するのですか?

注意事項 PostgreSQL 9.1以降を使用していて、トランザクションの外で変更を行うことに問題がない場合、以下を参照してください。 この回答 を使えば、もっと簡単な方法があります。


数日前に同じ問題に直面し、この投稿を見つけました。だから、私の答えは、解決策を探している誰かのために役立つことができます:)

変更したいenum型を使用している列が1つか2つしかない場合、これを試すことができます。また、新しい型の値の順序を変更することができます。

-- 1. rename the enum type you want to change
alter type some_enum_type rename to _some_enum_type;
-- 2. create new type
create type some_enum_type as enum ('old', 'values', 'and', 'new', 'ones');
-- 3. rename column(s) which uses our enum type
alter table some_table rename column some_column to _some_column;
-- 4. add new column of new type
alter table some_table add some_column some_enum_type not null default 'new';
-- 5. copy values to the new column
update some_table set some_column = _some_column::text::some_enum_type;
-- 6. remove old column and type
alter table some_table drop column _some_column;
drop type _some_enum_type;

3-6は、カラムが2つ以上ある場合は繰り返す必要があります。