×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.5.7. Перечислимые типы

2.5.7.1. Объявление перечислимых типов
2.5.7.2. Упорядочивание
2.5.7.3. Типобезопасность
2.5.7.4. Особенности реализации

Перечислимые типы (enum) представляют собой типы данных, состоящие из статического упорядоченного набора значений. Они эквивалентны типам enum поддерживаемым во многих языках программирования. Примером перечислимого типа могут служить дни недели или набор статусных значений для элемента данных.

2.5.7.1. Объявление перечислимых типов #

Типы enum создаются с помощью команды CREATE TYPE , например:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

После создания перечислимый тип можно использовать в определениях таблиц и функций точно так же, как и любой другой тип:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
CREATE TABLE person (
    name text,
    current_mood mood
);
INSERT INTO person VALUES ('Мо', 'happy');
SELECT * FROM person WHERE current_mood = 'happy';
 name | current_mood
------+--------------
 Мо  | happy
(1 строка)

2.5.7.2. Упорядочивание #

Порядок значений в перечисляемом типе данных (enum) соответствует порядку, в котором эти значения были перечислены при создании типа. Для перечислений поддерживаются все стандартные операторы сравнения и связанные агрегатные функции. Например:

INSERT INTO person VALUES ('Larry', 'sad');
INSERT INTO person VALUES ('фигурная скобка', 'ok');
SELECT * FROM person WHERE current_mood > 'sad';
 name  | current_mood
-------+--------------
 Мо   | happy
 фигурная скобка | ok
(2 строки)

SELECT * FROM person WHERE current_mood > 'sad' ORDER BY current_mood;
 name  | current_mood
-------+--------------
 фигурная скобка | ok
 Мо   | happy
(2 строки)

SELECT name
FROM person
WHERE current_mood = (SELECT MIN(current_mood) FROM person);
 name
-------
 Larry
(1 строка)

2.5.7.3. Типобезопасность #

Каждый перечисляемый тип данных является независимым и не может сравниваться с другими перечисляемыми типами. См. следующий пример:

CREATE TYPE happiness AS ENUM ('happy', 'very happy', 'ecstatic');
CREATE TABLE holidays (
    num_weeks integer,
    happiness happiness
);
INSERT INTO holidays(num_weeks,happiness) VALUES (4, 'happy');
INSERT INTO holidays(num_weeks,happiness) VALUES (6, 'very happy');
INSERT INTO holidays(num_weeks,happiness) VALUES (8, 'ecstatic');
INSERT INTO holidays(num_weeks,happiness) VALUES (2, 'sad');
ERROR:  invalid input value for enum happiness: "sad"
SELECT person.name, holidays.num_weeks FROM person, holidays
  WHERE person.current_mood = holidays.happiness;
ERROR:  operator does not exist: mood = happiness

Если вам действительно необходимо выполнить подобную операцию, вы можете либо создать пользовательский оператор, либо добавить в запрос явное приведение типов:

SELECT person.name, holidays.num_weeks FROM person, holidays
  WHERE person.current_mood::text = holidays.happiness::text;
 name | num_weeks
------+-----------
 Мо  |         4
(1 строка)

2.5.7.4. Особенности реализации #

Метки перечислений чувствительны к регистру, поэтому 'happy' не совпадает с 'HAPPY'. Пробелы в метках также являются значимыми.

Хотя типы-перечисления в первую очередь предназначены для статических наборов значений, поддерживается добавление новых значений в существующий тип-перечисление, а также переименование значений (см. ALTER TYPE). Из типа-перечисления нельзя удалить существующие значения, как и нельзя изменить порядок их сортировки без удаления и повторного создания самого типа.

Значение перечисления занимает на диске четыре байта. Длина текстовой метки значения перечисления ограничена параметром, NAMEDATALEN заданным при компиляции Digital Q.DataBase; в стандартных сборках это значение составляет максимум 63 байта.

Соответствие внутренних значений перечисления текстовым меткам хранится в системном каталоге pg_enum. Прямое обращение к этому каталогу с запросами может быть полезным.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению