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