autoinc

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

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

  1. Cоздайте триггер BEFORE INSERT (или BEFORE INSERT OR UPDATE) с этой функцией.
  2. Передайте триггеру два аргумента:
    • имя целочисленного столбца, который будет меняться;
    • имя объекта последовательности, который будет поставлять значения.
Можно задать любое число пар таких имен, если необходимо поддерживать несколько автоувеличивающихся столбцов.
Раскрыть type=sql
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;
Результат выполнения запроса для текущего примера:
Раскрыть type=sql
 id |     idesc
----+---------------
 -2 | first (-2 ?)
 -1 | second (-1 ?)
  1 | third (1 ?!)
(3 rows)

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

Дополнительную информацию по поставляемому модулю autoinc можно получить по ссылке.
Предыдущий раздел
auto_explain
Следующий раздел
bloom
Была ли страница полезной?