moddatetime. Функции для отслеживания времени последнего изменения
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Функция для отслеживания времени последнего изменения moddatetime() реализует код триггера, сохраняющего текущее время в поле типа timestamp. Может применяться для отслеживания времени последней модификации конкретной строки таблицы.
Примечание:
Функция
moddatetimeвходит в модульspi, который предоставляет несколько рабочих примеров использования «Интерфейса программирования сервера» (Server Programming Interface, SPI) и триггеров. Эти функции полезны как сами по себе и как заготовки, которые можно приспособить под собственные нужды.Каждая группа функций представлена в виде отдельно устанавливаемого расширения:
refint. Функции для реализации ссылочной целостности;autoinc. Функция для автоувеличения полей.;insert_username. Отслеживание вносящего изменения пользователя;moddatetime. Функции для отслеживания времени последнего изменения.Функции могут работать с любой таблицей, но при создании триггера необходимо явно указывать имена таблицы и полей.
Доработка
Не проводилась.
Установка
При наличии прав администратора СУБД включение модуля выполняется запросом:
CREATE EXTENSION moddatetime SCHEMA ext;
Настройка
Настройка не требуется.
Использование модуля
-
Создать таблицу с типом столбца
timestampилиtimestamp with time zone:CREATE TABLE mdt (id int4,idesc text,moddate timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL); -
Создать триггер
BEFORE UPDATEс этой функцией; передать триггеру один аргумент – имя целевого столбца, который должен иметь типtimestampилиtimestamp with time zone:CREATE TRIGGER mdt_moddatetimeBEFORE UPDATE ON mdtFOR EACH ROWEXECUTE PROCEDURE moddatetime (moddate);В результате будет получена следующая структура:
Table "ext.mdt"Column | Type | Collation | Nullable | Default | Storage | Stats target | Description---------+-----------------------------+-----------+----------+-------------------+----------+--------------+-------------id | integer | | | | plain | |idesc | text | | | | extended | |moddate | timestamp without time zone | | not null | CURRENT_TIMESTAMP | plain | |Triggers:mdt_moddatetime BEFORE UPDATE ON mdt FOR EACH ROW EXECUTE FUNCTION moddatetime('moddate')Access method: heap -
Заполнить тестовые данные:
INSERT INTO mdt VALUES(1, 'first'),(2, 'second'),(3, 'third'),(4, 'fourth');Содержимое до изменений:
SELECT * FROM mdt;Пример результата запроса:
id | idesc | moddate----+--------+----------------------------1 | first | 2023-02-21 13:20:57.9770692 | second | 2023-02-21 13:20:57.9770693 | third | 2023-02-21 13:20:57.9770694 | fourth | 2023-02-21 13:20:57.977069(4 rows) -
Изменить значения строк на выбор и убедиться в обновлении столбца функцией
moddatetime():UPDATE mdt SET id = 11 WHERE id = 1;UPDATE mdt SET id = 22 WHERE id = 2;UPDATE mdt SET id = 33 WHERE id = 3;Содержимое после изменений:
SELECT * FROM mdt;Пример результата запроса:
id | idesc | moddate----+--------+----------------------------4 | fourth | 2023-02-21 13:20:57.97706911 | first | 2023-02-21 13:22:30.73863922 | second | 2023-02-21 13:22:30.74387633 | third | 2023-02-21 13:22:31.993623(4 rows)
Ссылки на документацию разработчика:
Дополнительно поставляемый модуль moddatetime: https://www.postgresql.org/docs/13/contrib-spi.html#id-1.11.7.45.8.