moddatetime. Функции для отслеживания времени последнего изменения#
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Функция для отслеживания времени последнего изменения moddatetime() реализует код триггера, сохраняющего текущее время в поле типа timestamp. Может применяться для отслеживания времени последней модификации конкретной строки таблицы.
Примечание:
Функция
moddatetimeвходит в модульspi, который предоставляет несколько рабочих примеров использования «Интерфейса программирования сервера» (Server Programming Interface, SPI) и триггеров. Эти функции полезны как сами по себе и как заготовки, которые можно приспособить под собственные нужды.Каждая группа функций представлена в виде отдельно устанавливаемого расширения:
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_moddatetime BEFORE UPDATE ON mdt FOR EACH ROW EXECUTE 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.977069 2 | second | 2023-02-21 13:20:57.977069 3 | third | 2023-02-21 13:20:57.977069 4 | 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.977069 11 | first | 2023-02-21 13:22:30.738639 22 | second | 2023-02-21 13:22:30.743876 33 | third | 2023-02-21 13:22:31.993623 (4 rows)
Ссылки на документацию разработчика#
Дополнительно поставляемый модуль moddatetime: https://www.postgresql.org/docs/15/contrib-spi.html#id-1.11.7.50.8.