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


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

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

1 13

1 ответ:

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

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

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

  1. CURRENT_DATE
  2. 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 указано в комментариях. Это действительно было бы проблемой только для больших и часто обновляемых наборов данных. Если ваш набор данных мал или редко обновляется, то вы должны быть в порядке.