moddatetime

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

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

  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);
    
    В результате будет получена следующая структура:
    Раскрыть type=sql
                                                         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;
    Пример результата запроса:
    Раскрыть type=sql
     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;
    Пример результата запроса:
    Раскрыть type=sql
     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 можно получить по ссылке.
Предыдущий раздел
ltree_plpythonu
Следующий раздел
oid2name
Была ли страница полезной?