insert_username. Отслеживание вносящего изменения пользователя#

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

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

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

Функция insert_username () реализует код триггера, сохраняющего имя текущего пользователя в текстовом поле. Это может быть полезно для отслеживания пользователя, изменившего конкретную строку таблицы последним. Входит в модуль spi.

Примечание:

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

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

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

Доработка#

Доработка не проводилась.

Ограничения#

Ограничения отсутствуют.

Установка#

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

CREATE EXTENSION insert_username SCHEMA ext;

Настройка#

Настройка не требуется.

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

Для использования функции необходимо:

  • создать триггер BEFORE INSERT и/или UPDATE с этой функцией;

  • передать триггеру аргумент: имя целевого текстового столбца.

Пример использования:

Создать таблицу:

CREATE TABLE username_test (
	name        text,
	username    text not null
);

Создать триггер, который выполняет функцию insert_username при каждом добавлении и изменении строк в заданной таблице:

CREATE TRIGGER insert_usernames
    BEFORE INSERT OR UPDATE ON username_test
    FOR EACH ROW
    EXECUTE PROCEDURE insert_username (username);

Добавить данные в таблицу:

INSERT INTO username_test 
  VALUES  ('Nothing'),
          ('Null'),
          ('Empty string'),
          ('Space'),
          ('Tab'),
          ('Name');

Проверить результат:

SELECT * FROM username_test;

Результат выполнения запроса:

     name     | username 
--------------+----------
 nothing      | postgres
 null         | postgres
 empty string | postgres
 space        | postgres
 tab          | postgres
 name         | postgres
(6 rows)

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

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