PostgreSQL ENUM値(列挙型)を使用する

PostgreSQL ENUM値(列挙型)を使用する

PostgreSQLで、INDEXを再構築するREINDEXを実行する手順を記述してます。

環境

  • OS Rocky Linux release 8.4 (Green Obsidian)
  • PostgreSQL 14.0
  • pgadmin 6.0

ENUM値(列挙型)作成

REINDEXを実行する場合は、「CREATE TYPE」を使用します。

CREATE TYPE 列挙型名 AS ENUM (値 , 値 , 値... )

実際に「bar」というENUM値を作成してみます。

CREATE TYPE bar AS ENUM ('tanaka', 'suzuki', 'sato')

実行結果

作成したENUM値を使用してテーブルを作成してみます。

CREATE TABLE foo (
    id integer,
    bartype bar
);

この作成した「foo」テーブルにたいして、ENUM値で列挙した値以外を「insert」するとエラーとなります。

まずは、ENUM値にある値を「insert」してみます。

INSERT INTO foo VALUES(1,'tanaka') -- ENUM値にあるのでエラーにならない

存在するのでエラーになりません。

次にENUM値にない値を「insert」してみます。

INSERT INTO foo VALUES(2,'takeda') -- ENUM値にないのでエラーになる

以下のように、ENUM値に存在しないのでエラーとなります。

ENUM値確認

作成したENUM値は、以下で確認できます。

select pn.nspname,  
       pt.typname,  
       pe.enumlabel
from pg_type pt 
   join pg_enum pe on pt.oid = pe.enumtypid  
   join pg_catalog.pg_namespace pn ON pn.oid = pt.typnamespace

ENUM値追加

ENUM値を追加する場合は、以下のように追加します。

さきほど作成した「bar」に値「’nakagawa’」を追加してみます。

ALTER TYPE bar ADD VALUE 'nakagawa'

ENUM値変更

ENUM値を変更する場合は、以下のように変更します。

ALTER TYPE bar RENAME VALUE 'tanaka' TO 'takasugi'

ENUM値を変更すると、ENUM値を使用したテーブルの値も変更されます。

ENUM値削除

削除する場合は、以下となります。
※使用されているとエラーになります。

DROP TYPE bar

実行結果