autoinc. Функция для автоувеличения полей
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext
.
Функция для автоувеличения полей autoinc ()
реализует код триггера, сохраняющего следующее значение последовательности в целочисленном поле. Это пересекается со встроенной функциональностью столбца «serial»
, но autoinc ()
препятствует попыткам вставить другое значение поля при добавлении строк и может увеличивать значение поля при изменениях.
Примечание:
Функция
autoinc
входит в модульspi
, который предоставляет несколько рабочих примеров использования «Интерфейса программирования сервера» (Server Programming Interface, SPI) и триггеров. Эти функции полезны как сами по себе и как заготовки, которые можно приспособить под собственные нужды.Каждая группа функций представлена в виде отдельно устанавливаемого расширения:
refint
. Функции для реализации ссылочной целостности;autoinc
. Функции для автоувеличения полей;insert_username
. Отслеживание вносящего изменения пользователя;moddatetime
. Функции для отслеживания времени последнего изменения.Функции могут работать с любой таблицей, но при создании триггера необходимо явно указывать имена таблицы и полей.
Доработка
Не проводилась.
Установка
При наличии прав администратора СУБД включение модуля возможно выполнить вручную:
CREATE EXTENSION autoinc SCHEMA ext;
Настройка
Не требуется.
Использование модуля
-
создать триггер
BEFORE INSERT
(илиBEFORE INSERT OR UPDATE
) с этой функцией; -
передать триггеру два аргумента:
- имя целочисленного столбца, который будет меняться;
- имя объекта последовательности, который будет поставлять значения.
Можно задать любое число пар таких имен, если необходимо поддерживать несколько автоувеличивающихся столбцов.
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.