我有一个称为price_changes的materialized 视图,用于一些报告.我还有一个cron任务,用refresh materialized view price_changes刷新materialized 视图.一切都很顺利.

我想给查看报告的用户一条信息"数据从X开始是 fresh 的".当cron运行时,我可以将其存储在某个地方,但postgres是否已经将此元数据存储在某个地方了?

推荐答案

从9.3.4开始,我不认为系统中有任何东西可以提供这种功能.当我需要提供上次刷新的日期时,我会在materialized 视图中的select查询中添加一个名为"last_refresh"的列,因为materialized 视图中的数据在刷新之前不会更改.

出于安全原因,我也更喜欢这样做,因为如果信息存储在系统表中,您可能不想让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;

Update 2017-02-17:

PostgreSQL 9.4+版现在包含CONCURRENTLY个选项.如果使用REFRESH MATERIALIZED VIEW CONCURRENTLY选项,请注意@Smudge在注释中的指示.这实际上只会是大型且经常更新的数据集的问题.如果你的数据集很小或很少更新,那么你应该没事.

Postgresql相关问答推荐

在SqlalChemy中转义动态CamelCase场

包含JSONB属性的过滤器的索引策略

Org.postgresql.util.PSQLException:错误:函数LOWER(BYTEA)不存在

使用函数返回值作为另一个函数的参数

Postgres将唯一索引添加到已在分区上具有PK的分区表中,然后添加PK

将CSV文件复制到临时表

如何在postgres中测试锁定

docker-compose.yml用于使用postgres的spring-boot应用程序

如何将特定值排序为最后,其余记录按 id DESC 排序?

如何在不同的行中显示两列,避免重复并省略空条目

如何通过 DirectFunctionCall 发送 NULL 参数?

Java - 日期保存为前一天

DbProviderFactory 与 Npgsql?

表或列名不能以数字开头?

Postgres 图像未创建数据库

如何查询存储在数组中的 Rails ActiveRecord 数据

我不明白 postgresql 的 nextval() 是如何工作的,有人可以解释一下吗?

PostgreSQL 中跨多个表的索引

为什么是||在 PostgreSQL/Redshift 中用作字符串连接

python postgres 我可以 fetchall() 100 万行吗?