Предупреждение, если данные не были загружены в таблицу PostgreSQL - PullRequest
0 голосов
/ 05 декабря 2018

Есть ли способ предупредить меня, если в таблицу или поле / столбец не были вставлены данные за этот день?

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

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Это пример того, как такая вещь может быть реализована с помощью триггеров:

Во-первых, таблица, в которой мы хотим проверить наличие изменений данных:

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 всегда будет содержать время последнего изменения таблицы.Следите за значениями, чтобы получить предупреждение.

0 голосов
/ 05 декабря 2018

.. но у меня нет возможности узнать, действительно ли он работал без необходимости запрашивать таблицу.

Вы можете взглянуть во внутренний журнал postgresql:

ALTER DATABASE your_database_name
SET log_statement = 'all';

Или погрузитесь немного глубже в это и отредактируйте ваш postgresql.conf как:

log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
logging_collector = on

и перезапустите postgresql

sudo service postgresql restart 

Или вы могли бы поймать ваши вакансии / услугивозврат sql-запроса и попросите их записать его в файл, если это лучше подходит для ваших нужд.

Просто имейте в виду, что журналы могут со временем стать довольно большими (в зависимости от частоты запросов) ..

РЕДАКТИРОВАТЬ

Как заявил Лоренцв его комментарии лучше использовать

 SET log_statement = 'mod';

на случай, если это «занятый» дБ.Спасибо @ Laurenz

...