Enumy v PostgreSQL

Datový typ enum v PostgreSQL vytvoříte příkazem CREATE TYPE ... AS ENUM ...

drop type if exists client;
create type client as enum ('UNKNOWN', 'PERSON', 'COMPANY');

Pro testování si vytvoříme tabulku, kde jeden ze sloupců bude nově vytvořeného typu a vložíme si do tabulky nějaká data.

drop table if exists t_client_info;
create table t_client_info(
	id bigint not null,
	client_type client,
	description text
);

insert into t_client_info (id, client_type, description) values 
(1, 'PERSON', 'John Smith'),
(2, 'COMPANY', 'Big Company'),
(3, 'PERSON', 'Jack White'),
(4, 'UNKNOWN', '');

Nová hodnota enumu se dá přidat jednoduše příkazem ALTER TYPE ... ADD VALUE ...

alter type client add value 'BANK';

insert into t_client_info (id, client_type, description) values 
(5, 'BANK', 'Bing Bank');

Pokud hodnota v enumu není, dostanete chybu

Error: ERROR: invalid input value for enum client: "NON_PROFIT"
  Position: 70
SQLState:  22P02
ErrorCode: 0

Seznam všech hodnot enumu dostanete následujícími dotazy

select enum_range(NULL::client);
select unnest(enum_range(NULL::client));

Zdroje:

Napsat komentář