autoinc
Функция для автоувеличения полей.
Схема размещения:
ext
.Функция для автоувеличения полей
autoinc ()
реализует код триггера, сохраняющего следующее значение последовательности в целочисленном поле. Это пересекается со встроенной функциональностью столбца «serial»
, но autoinc ()
препятствует попыткам вставить другое значение поля при добавлении строк и может увеличивать значение поля при изменениях.Функция входит в модуль
spi
, который предоставляет несколько рабочих примеров использования «Интерфейса программирования сервера» (Server Programming Interface, SPI) и триггеров. Эти функции полезны как сами по себе и как заготовки, которые можно приспособить под собственные нужды.Каждая группа функций представлена в виде отдельно устанавливаемого расширения:
refint
- функции для реализации ссылочной целостности;autoinc
- функции для автоувеличения полей;insert_username
- функция для отслеживания вносящего изменения пользователя;moddatetime
- функции для отслеживания времени последнего изменения.
Функции могут работать с любой таблицей, но при создании триггера необходимо явно указывать имена таблицы и полей.
-
Cоздайте триггер
BEFORE INSERT
(илиBEFORE INSERT OR UPDATE
) с этой функцией. -
Передайте триггеру два аргумента:
- имя целочисленного столбца, который будет меняться;
- имя объекта последовательности, который будет поставлять значения.
Можно задать любое число пар таких имен, если необходимо поддерживать несколько автоувеличивающихся столбцов.
Раскрыть type=sqlCREATE 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;
Результат выполнения запроса для текущего примера:
Раскрыть type=sqlid | idesc ----+--------------- -2 | first (-2 ?) -1 | second (-1 ?) 1 | third (1 ?!) (3 rows)
Дополнительную информацию по поставляемому модулю autoinc можно получить по ссылке.