Это пример того, как такая вещь может быть реализована с помощью триггеров:
Во-первых, таблица, в которой мы хотим проверить наличие изменений данных:
CREATE TABLE collected_values (
...
);
Теперь таблица, в которой мызаписывать изменения данных (fillfactor
- это то, что мы получаем ГОРЯЧИЕ обновления и избегаем раздувания таблиц, даже если существует высокая скорость изменений):
CREATE TABLE last_updated (
updated_table regclass PRIMARY KEY,
mod_time timestamp with time zone NOT NULL
) WITH (fillfactor = 40);
INSERT INTO last_updated
VALUES ('collected_values'::regclass, '-infinity');
Функция триггера и триггер:
CREATE FUNCTION record_mod() RETURNS trigger
LANGUAGE plpgsql AS
$$BEGIN
UPDATE last_updated
SET mod_time = current_timestamp
WHERE updated_table = TG_RELID;
RETURN NULL;
END;$$;
CREATE TRIGGER record_mod AFTER INSERT OR UPDATE OR DELETE ON collected_values
FOR EACH STATEMENT EXECUTE PROCEDURE record_mod();
Теперь last_updated
всегда будет содержать время последнего изменения таблицы.Следите за значениями, чтобы получить предупреждение.