PostgreSQLのENUM型をアップデート!新しい値を追加する方法
PostgreSQLの既存のENUM型に新しい値を追加する方法
ALTER TYPEコマンドを使用する
手順
- 追加したい値を決定します。
- 以下のコマンドを実行します。
ALTER TYPE enum_type_name ADD VALUE new_value;
例
ALTER TYPE color ADD VALUE 'purple';
注意
- この方法は、PostgreSQL 9.2以降で使用できます。
- ALTER TYPEコマンドを実行すると、既存のデータは変更されません。
- 新しい値は、ENUM型の最後の値として追加されます。
列挙型を削除して再作成する
- 以下のコマンドを実行して、既存の列挙型を削除します。
DROP TYPE enum_type_name;
CREATE TYPE enum_type_name AS ENUM ('value1', 'value2', ..., 'new_value');
DROP TYPE color;
CREATE TYPE color AS ENUM ('red', 'green', 'blue', 'purple');
- この方法は、すべてのバージョンのPostgreSQLで使用できます。
- この方法を使用すると、既存のデータはすべて失われます。
データベースをダンプして再ロードする
pg_dump -Fc database_name > database.dump
pg_restore -Fc database.dump
pg_dump -Fc my_database > my_database.dump
# テキストエディタで my_database.dump ファイルを開き、
# 'color' 型の定義に 'purple' という値を追加
pg_restore -Fc my_database.dump
- この方法を使用すると、データベース全体が復元されます。
- ALTER TYPEコマンドを使用する方法は、最も簡単で安全な方法です。
- 列挙型を削除して再作成する方法は、古いバージョンのPostgreSQLを使用している場合に使用できます。
- データベースをダンプして再ロードする方法は、複雑な方法ですが、すべての状況で使用できます。
PostgreSQLの既存のENUM型に新しい値を追加するには、いくつかの方法があります。どの方法を使用するべきかは、状況によって異なります。
-- 既存のENUM型 'color' を定義
CREATE TYPE color AS ENUM ('red', 'green', 'blue');
-- ALTER TYPEコマンドを使用して新しい値 'purple' を追加
ALTER TYPE color ADD VALUE 'purple';
-- 新しい値 'purple' を使用して INSERT
INSERT INTO table_name (color) VALUES ('purple');
-- 列挙型 'color' を削除
DROP TYPE color;
-- 新しい値 'purple' を含む列挙型 'color' を再作成
CREATE TYPE color AS ENUM ('red', 'green', 'blue', 'purple');
-- 新しい値 'purple' を使用して INSERT
INSERT INTO table_name (color) VALUES ('purple');
-- データベースをダンプ
pg_dump -Fc database_name > database.dump
-- テキストエディタで 'database.dump' ファイルを開き、
-- 'color' 型の定義に 'purple' という値を追加
-- データベースを再ロード
pg_restore -Fc database.dump
- ALTER TYPEコマンドを実行する前に、データベースをバックアップすることをお勧めします。
PostgreSQLの既存のENUM型に新しい値を追加する他の方法
PL/pgSQLを使用して新しい値を追加する
- 以下のPL/pgSQL関数を記述します。
CREATE FUNCTION add_enum_value(
enum_type_name text,
new_value text)
RETURNS void
AS $$
BEGIN
EXECUTE format(
'ALTER TYPE %I ADD VALUE %L;',
enum_type_name,
new_value);
END;
$$ LANGUAGE plpgsql;
SELECT add_enum_value('color', 'purple');
CREATE FUNCTION add_enum_value(
enum_type_name text,
new_value text)
RETURNS void
AS $$
BEGIN
EXECUTE format(
'ALTER TYPE %I ADD VALUE %L;',
enum_type_name,
new_value);
END;
$$ LANGUAGE plpgsql;
SELECT add_enum_value('color', 'purple');
- PL/pgSQLを使用するには、PL/pgSQLをインストールする必要があります。
外部ツールを使用して新しい値を追加する
- PostgreSQL用の外部ツールをインストールします。
- ツールを使用して、既存のENUM型に新しい値を追加します。
- pgAdmin IIIなどのGUIツールを使用して、ENUM型に新しい値を追加できます。
psql
コマンドラインツールを使用して、以下のコマンドを実行できます。
\set enum_type_name 'color'
\alter enum type enum_type_name ADD VALUE 'purple';
- 使用するツールによって、手順が異なる場合があります。
database postgresql enums