Для ситуаций когда значения поля в таблице PostgreSQL имеет ограниченное количество строковых значений, для использования отлично подходит тип Enums, который предварительно создаем, а потом используем при создании поля в таблице.
Создание ENUM.
Рассмотрим на примере таблицы со списком организаций, где одно из полей это тип организации которое может иметь значения ИП или ООО.
Для такого кейса вначале создаем тип enums с названием `company_type` следующей командой:
CREATE TYPE company_type AS ENUM ('ip', 'ooo');
Если вы используете PgAdmin для PostgreSQL, то можете увидеть вновь созданный тип enum в специальном меню:

Просмотр всех доступных ENUMS в схеме.
Также можно посмотреть все имеющиеся enums и их допустимые значения в PosgreSQL выполнив SQL запрос:
SELECT n.nspname AS enum_schema,
t.typname AS enum_name,
e.enumlabel AS enum_value
FROM pg_type t
JOIN pg_enum e ON t.oid = e.enumtypid
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace;
В случае с тестовым примером для типов организаций будет вот такой результат:

Использование ENUMS в полях таблиц.
После создания, enums можно использовать для указания типов для полей в таблицах, например при создании таблиц. Так создание простой таблицы для хранения списка компаний с типами ИП и ООО может быть выполнено при помощи SQL команды:
CREATE TABLE public.company
(
id serial,
name character varying(256) NOT NULL,
type company_type NOT NULL,
description text
);
Добавление новых значений в enum.
Если в справочнике появляются компании с новым типом ПАО, то легко можно добавить новое значение в перечисления enums, с помощью SQL запроса:
ALTER TYPE company_type
ADD VALUE 'pao';
После выполнения увидим что у нас появился новое значение для enum company_type
.

Особенности работы ENUM в PostgreSQL.
При работе с ENUM стоит учитывать следующие нюансы:
- Значения перечисления чувствительны к регистру, поэтому «ПАО» — это не то же самое, что «пао». Пробелы в значениях тоже имеют значение.
- Существующие значения enums не могут быть удалены из типа перечисления, а также не может быть изменен порядок сортировки таких значений, за исключением удаления и повторного создания типа перечисления.
- Значение перечисления enum занимает четыре байта на диске. Длина текстовой метки значения перечисления ограничена настройкой NAMEDATALEN, скомпилированной в PostgreSQL; в стандартных сборках это означает не более 63 байт.