Перейти к основному содержимому

autoinc. Функция для автоувеличения полей

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Функция для автоувеличения полей autoinc () реализует код триггера, сохраняющего следующее значение последовательности в целочисленном поле. Это пересекается со встроенной функциональностью столбца «serial», но autoinc () препятствует попыткам вставить другое значение поля при добавлении строк и может увеличивать значение поля при изменениях.

Примечание:

Функция autoinc входит в модуль spi, который предоставляет несколько рабочих примеров использования «Интерфейса программирования сервера» (Server Programming Interface, SPI) и триггеров. Эти функции полезны как сами по себе и как заготовки, которые можно приспособить под собственные нужды.

Каждая группа функций представлена в виде отдельно устанавливаемого расширения:

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

Доработка

Не проводилась.

Установка

При наличии прав администратора СУБД включение модуля возможно выполнить вручную:

CREATE EXTENSION autoinc SCHEMA ext;

Настройка

Не требуется.

Использование модуля

  1. создать триггер BEFORE INSERT (или BEFORE INSERT OR UPDATE) с этой функцией;

  2. передать триггеру два аргумента:

    • имя целочисленного столбца, который будет меняться;
    • имя объекта последовательности, который будет поставлять значения.

Можно задать любое число пар таких имен, если необходимо поддерживать несколько автоувеличивающихся столбцов.

CREATE SEQUENCE next_id START -2 MINVALUE -2;

CREATE TABLE ids (
id int4,
idesc text
);

CREATE TRIGGER ids_nextid
BEFORE INSERT OR UPDATE ON ids
FOR EACH ROW
EXECUTE PROCEDURE autoinc (id, next_id);

INSERT INTO ids VALUES (0, 'first (-2 ?)');
INSERT INTO ids VALUES (null, 'second (-1 ?)');
INSERT INTO ids(idesc) VALUES ('third (1 ?!)');

Выборка данных из таблицы:

SELECT * FROM ids;

Результат выполнения запроса для текущего примера:

 id |     idesc     
----+---------------
-2 | first (-2 ?)
-1 | second (-1 ?)
1 | third (1 ?!)
(3 rows)

Ссылки на документацию разработчика

Дополнительно поставляемый модуль autoinc: https://www.postgresql.org/docs/15/contrib-spi.html#id-1.11.7.50.6.