Проверить последнее обновленное время для материализованного представления

У меня есть материализованное представление под названием price_changes, используемое для некоторых отчетов. Я также получил задание cron, обновляющее материализованное представление с помощью refresh materialized view price_changes. Все отлично работает.

Я хотел бы дать пользователям посмотреть в отчете сообщение "Данные свежие с X". Я мог бы хранить его где-нибудь, когда cron запускается, но postgres уже где-то хранят эти метаданные?

Ответ 1

Я не думаю, что в системе есть что-то, что обеспечивает это с 9.3.4. Когда мне нужно указать дату последнего обновления, я добавлю столбец с именем "last_refresh" в запрос выбора в материализованном представлении, так как данные в материализованном представлении не изменятся, пока не будут обновлены.

Я также предпочитаю это по соображениям безопасности, так как вы можете не захотеть предоставить пользователю sql доступ к системным таблицам, если информация там хранится.

В зависимости от времени вы можете использовать либо:

  • CURRENT_DATE
  • now()

Только дата:

CREATE MATERIALIZED VIEW mv_address AS 
SELECT *, CURRENT_DATE AS last_refresh FROM address;

С датой и временем:

CREATE MATERIALIZED VIEW mv_address AS 
SELECT *, now() AS last_refresh FROM address;

Обновление 2017-02-17:

PostgreSQL версии 9.4+ теперь включает опцию CONCURRENTLY. Если вы используете опцию REFRESH MATERIALIZED VIEW CONCURRENTLY, помните о том, что @Smudge указано в комментариях. Это действительно будет проблемой только для больших и часто обновляемых наборов данных. Если ваш набор данных невелик или редко обновляется, вы должны быть в порядке.