Проверьте время последнего обновления для материализованного представления
У меня есть материализованное представление под названием price_changes
, используемое для некоторых отчетов. У меня также есть работа cron, освежающая материализованный вид с помощью refresh materialized view price_changes
. Все работает отлично.
Я хотел бы дать пользователям, просматривающим отчет, сообщение "данные свежие по состоянию на X". Я мог бы хранить его где-нибудь, когда работает cron, но postgres уже хранит эти метаданные где-то?
1 ответ:
Я не думаю, что в системе есть что-то, что обеспечивает это по состоянию на 9.3.4. Когда мне нужно указать дату последнего обновления, я добавляю столбец под названием "last_refresh" в запрос select в материализованном представлении, поскольку данные в материализованном представлении не изменятся, пока они не будут обновлены.
Я также предпочитаю это по соображениям безопасности, поскольку вы можете не дать пользователю 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 указано в комментариях. Это действительно было бы проблемой только для больших и часто обновляемых наборов данных. Если ваш набор данных мал или редко обновляется, то вы должны быть в порядке.