Ответ
Да, PostgreSQL имеет полноценную поддержку пользовательских перечисляемых типов (ENUM). Они обеспечивают проверку данных на уровне базы и повышают семантическую ясность схемы.
Создание и использование ENUM:
-- 1. Создать новый ENUM-тип
CREATE TYPE status AS ENUM ('NEW', 'IN_PROGRESS', 'CLOSED');
-- 2. Использовать его в таблице
CREATE TABLE tasks (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
current_status status NOT NULL DEFAULT 'NEW'
);
-- 3. Вставка данных (только допустимые значения)
INSERT INTO tasks (title, current_status) VALUES ('Fix bug', 'IN_PROGRESS');
-- Эта вставка вызовет ОШИБКУ:
-- INSERT INTO tasks (title, current_status) VALUES ('Fix bug', 'UNKNOWN');
Ключевые особенности и операции:
- Порядок и сравнение: Значения сортируются в порядке их объявления при создании типа.
- Чувствительность к регистру: Значения
'NEW'и'new'— разные. - Модификация типа: Можно добавлять новые значения в конец перечисления.
ALTER TYPE status ADD VALUE 'ON_HOLD' AFTER 'IN_PROGRESS'; - Запросы: С ENUM работают все стандартные операторы сравнения (
=,>,<и т.д.).
Преимущество: ENUM безопаснее и читаемее, чем текстовые поля с CHECK-ограничением.