【问题标题】:Changing a table into a continuous view - issue with dependent continuous views将表格更改为连续视图 - 相关连续视图的问题
【发布时间】:2015-11-25 17:40:22
【问题描述】:

我们正在重构表和视图的结构,其中一项改进是将一个表(从 java 类“手动”更新)更改为连续视图。

视图的名称必须与旧表相同,并且必须保留旧数据,所以我认为这些步骤是合乎逻辑的:

  1. ALTER TABLE old_table 重命名为 old_table_temp
  2. 创建新的连续视图
  3. INSERT INTO new_continuous_view SELECT * FROM old_table_temp
  4. 删除 old_table_temp

我现在遇到的问题是,重命名表时,所有依赖视图仍将依赖于新命名的表,因此我无法删除它。错误如下所示:

analytics=> drop table renamed_table;
ERROR:  cannot drop table renamed_table because other objects depend on it
DETAIL:  continuous view cview1 depends on table renamed_table
continuous view cview2 depends on table renamed_table
continuous view cview3 depends on table renamed_table
continuous view cview4 depends on table renamed_table

任何想法都会受到赞赏,即使它是一种不同的方法。

【问题讨论】:

    标签: pipelinedb


    【解决方案1】:

    这是不可能的。每个连续视图都由一个物化表(后缀为_mrel)支持,该表存储在连续视图中计算的所有聚合的转换状态。在读取时,这些过渡状态被转换为最终的聚合值。一个简单的例子是avg,其中具体化表存储总和和计数,在读取时我们通过将两者相除来计算平均值。

    这些转换状态大多是字节数组,它们的内部实现不会暴露给用户,因此创建它们的唯一方法是将数据回填到连续视图正在读取的流中,并让我们的连续查询执行管道重新- 计算它们。

    默认情况下禁用对具体化表的修改,但您可以通过设置配置参数continuous_query_materialization_table_updatable 来启用它们。这在您想要截断旧数据或删除要回填数据的特定组的数据时可能很有用。

    就迁移依赖视图而言,我认为最简单的方法是在连续视图上重新定义它们。整个依赖管理是 PostgreSQL 内部的,不建议手动调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      相关资源
      最近更新 更多