【问题标题】:PostgreSQL - Streaming materialized views changesPostgreSQL - 流式物化视图更改
【发布时间】:2018-01-08 08:10:09
【问题描述】:

我使用 PostgreSQL 将数百万行存储在异步刷新的物化视图中。数据是来自多个表的多个连接的来源。

是否可以在物化视图中流式传输/通知更改了哪些行(无论是创建/更新/删除)吗?

【问题讨论】:

  • Postgres 中的物化视图只能使用REFRESH MATERIALIZED VIEW my_view 进行整体更新。您不能执行部分更新。

标签: postgresql materialized-views


【解决方案1】:

我的声誉太低了,所以我必须在回答部分提问。

从一开始——为什么要使用物化视图来存储数百万行?将它们存储在经典表中不是更好吗?有了它,您可以使用 triggers 记录此实体的更改。

【讨论】:

  • 我们无法更新数据,因此正在使用 AWS DMS 复制整个数据库。然后我们使用物化视图来构造我们关心的对象。
  • 您可以尝试创建触发器,如果​​“正在复制整个数据库”意味着您正在将其复制到您的数据库,然后进一步处理。但我敢打赌它不会。您也可以尝试在此物化表中添加一些时间戳列,以存储添加日期的时间以在此之后查询,但我现在无法做到。
【解决方案2】:

从 Postgres 9.4 开始,您可以“同时”刷新实体化视图以仅影响新的和修改的行。

来自http://www.postgresqltutorial.com/postgresql-materialized-views/

"使用 CONCURRENTLY 选项,PostgreSQL 会创建物化视图的临时更新版本,比较两个版本,并只执行插入和更新差异。您可以在物化视图正在运行时对其进行查询已更新。使用 CONCURRENTLY 选项的一个要求是物化视图必须具有唯一索引。请注意,CONCURRENTLY 选项仅适用于 PosgreSQL 9.4。"

官方文档:https://www.postgresql.org/docs/current/sql-refreshmaterializedview.html

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多