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

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

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

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

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

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

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

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

2.2.4. Генерируемые столбцы

Генерируемый столбец — это специальный столбец, значение которого всегда вычисляется на основе значений других столбцов. Таким образом, он является для столбцов тем же, чем представление является для таблиц. Существует два вида генерируемых столбцов: хранимые и виртуальные. Хранимый генерируемый столбец вычисляется при записи данных (вставке или обновлении) и занимает место в хранилище так же, как и обычный столбец. Виртуальный генерируемый столбец не занимает места на диске и вычисляется непосредственно при чтении. Таким образом, виртуальный генерируемый столбец аналогичен обычному представлению, а хранимый — материализованному представлению (за исключением того, что он всегда обновляется автоматически). Digital Q.DataBase в настоящее время реализована поддержка только хранимых генерируемых столбцов.

Для создания генерируемого столбца используйте конструкцию GENERATED ALWAYS AS в CREATE TABLE, например:

CREATE TABLE people (
    ...,
    height_cm numeric,
    height_in numeric GENERATED ALWAYS AS (height_cm / 2.54) STORED
);

Ключевое слово STORED необходимо указать для выбора хранимого типа генерируемого столбца. См. CREATE TABLE для получения дополнительных сведений.

В генерируемый столбец нельзя производить запись напрямую. В INSERT или UPDATE командах нельзя указывать значение для генерируемого столбца, однако ключевое слово DEFAULT может быть указано.

Рассмотрим различия между столбцом со значением по умолчанию и генерируемым столбцом. Значение по умолчанию вычисляется один раз при первой вставке строки, если не было указано иное значение; генерируемый столбец обновляется при любом изменении строки, и это поведение нельзя переопределить. Значение по умолчанию не может ссылаться на другие столбцы таблицы; выражение генерации, как правило, ссылается на них. Значение по умолчанию может использовать волатильные функции, например random() или функции, обращающиеся к текущему времени; это не допускается для генерируемых столбцов.

К определению генерируемых столбцов и таблиц, содержащих их, применяется ряд ограничений:

  • В выражении генерации можно использовать только постоянные (immutable) функции; оно не может содержать подзапросы или ссылаться на что-либо, кроме текущей строки.

  • Выражение генерации не может ссылаться на другой генерируемый столбец.

  • Выражение генерации не может ссылаться на системный столбец, за исключением tableoid.

  • Для генерируемого столбца нельзя задать значение по умолчанию или определение идентичности (identity).

  • Генерируемый столбец не может входить в ключ секционирования.

  • Сторонние таблицы могут содержать генерируемые столбцы. Подробнее см. CREATE FOREIGN TABLE для получения дополнительных сведений.

  • Для механизмов наследования и секционирования:

    • Если столбец родительской таблицы является генерируемым, то соответствующий дочерний столбец также должен быть генерируемым; при этом для дочернего столбца может быть указано другое выражение генерации. Выражение генерации, фактически применяемое при вставке или обновлении строки, определяется таблицей, в которой эта строка размещена физически. (Это отличается от поведения значений по умолчанию: для них используется значение по умолчанию, связанное с той таблицей, имя которой указано в запросе.)

    • Если столбец родительского элемента не является генерируемым, то его дочерний столбец также не должен быть генерируемым.

    • Для наследуемых таблиц: если определение дочернего столбца не содержит ключевого слова GENERATED в CREATE TABLE ... INHERITS, то его GENERATED предложение будет автоматически скопировано из родительского элемента. ALTER TABLE ... INHERIT будет требовать, чтобы родительский и дочерний столбцы уже соответствовали друг другу по статусу генерации, но при этом не требуется соответствие их выражений генерации.

    • Аналогично для секционированных таблиц: если определение дочернего столбца не содержит параметров GENERATED предложение в CREATE TABLE ... выражение PARTITION OF, то его GENERATED предложение будет автоматически скопировано из родительского элемента. ALTER TABLE ... ATTACH PARTITION будет требовать, чтобы столбцы родительского и дочернего элементов уже соответствовали друг другу по статусу генерации, но при этом не потребует, чтобы их выражения генерации совпадали.

    • В случае множественного наследования, если один родительский столбец является генерируемым столбцом, то все родительские столбцы должны быть генерируемыми столбцами. Если они не имеют одинакового выражения генерации, то необходимое выражение для дочернего элемента должно быть указано явно.

    При использовании генерируемых столбцов действуют дополнительные правила.

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

    • Концептуально, генерируемые столбцы обновляются после триггеров BEFORE триггеры уже сработали. Таким образом, изменения, внесенные в базовые столбцы в BEFORE триггере, будут отражены в генерируемых столбцах. Но и наоборот, не допускается обращение к генерируемым столбцам в BEFORE Триггеры.

    • Генерируемые столбцы пропускаются при логической репликации и не могут быть указаны в CREATE PUBLICATION списке столбцов.

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

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