autoinc
Функция для автоувеличения полей.
Схема размещения:
ext.Функция для автоувеличения полей
autoinc () реализует код триггера, сохраняющего следующее значение последовательности в целочисленном поле. Это пересекается со встроенной функциональностью столбца «serial», но autoinc () препятствует попыткам вставить другое значение поля при добавлении строк и может увеличивать значение поля при изменениях.Функция входит в модуль
spi, который предоставляет несколько рабочих примеров использования «Интерфейса программирования сервера» (Server Programming Interface, SPI) и триггеров. Эти функции полезны как сами по себе и как заготовки, которые можно приспособить под собственные нужды.Каждая группа функций представлена в виде отдельно устанавливаемого расширения:
refint- функции для реализации ссылочной целостности;autoinc- функции для автоувеличения полей;insert_username- функция для отслеживания вносящего изменения пользователя;moddatetime- функции для отслеживания времени последнего изменения.
Функции могут работать с любой таблицей, но при создании триггера необходимо явно указывать имена таблицы и полей.
-
Cоздайте триггер
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 можно получить по ссылке.