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_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.