Перейти к основному содержимому

moddatetime. Функции для отслеживания времени последнего изменения

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Функция для отслеживания времени последнего изменения moddatetime() реализует код триггера, сохраняющего текущее время в поле типа timestamp. Может применяться для отслеживания времени последней модификации конкретной строки таблицы.

Примечание:

Функция moddatetime входит в модуль spi, который предоставляет несколько рабочих примеров использования «Интерфейса программирования сервера» (Server Programming Interface, SPI) и триггеров. Эти функции полезны как сами по себе и как заготовки, которые можно приспособить под собственные нужды.

Каждая группа функций представлена в виде отдельно устанавливаемого расширения:

Функции могут работать с любой таблицей, но при создании триггера необходимо явно указывать имена таблицы и полей.

Доработка

Не проводилась.

Установка

При наличии прав администратора СУБД включение модуля выполняется запросом:

CREATE EXTENSION moddatetime SCHEMA ext;

Настройка

Настройка не требуется.

Использование модуля

  1. Создать таблицу с типом столбца timestamp или timestamp with time zone:

    CREATE TABLE mdt (
    id int4,
    idesc text,
    moddate timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL
    );
  2. Создать триггер 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
  3. Заполнить тестовые данные:

    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)
  4. Изменить значения строк на выбор и убедиться в обновлении столбца функцией 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.