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