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.