将表格更改为连续视图 - 依赖于连续视图的问题

时间:2015-11-25 17:40:23

标签: pipelinedb

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

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

  1. ALTER TABLE old_table RENAME TO old_table_temp
  2. 创建新的连续视图
  3. INSERT INTO new_continuous_view SELECT * FROM old_table_temp
  4. DROP old_table_temp
  5. 我现在遇到的问题是,在重命名表时,所有相关视图仍将依赖于新命名的表,因此我无法删除它。错误如下所示:

    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
    

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

1 个答案:

答案 0 :(得分:1)

这是不可能的。每个连续视图都由实现表(后缀为(n-nstars)/2)支持,该表存储在连续视图中计算的所有聚合的过渡状态。在读取时,这些转换状态被转换为最终的聚合值。一个简单的例子是n = 13 all_stars_line = (n-1)/2 n.times do |i| nstars = n-2*(i-all_stars_line).abs nspaces = (n-nstars)/2 puts "%s%s" % [' '*nspaces, '*'*nstars] end * *** ***** ******* ********* *********** ************* *********** ********* ******* ***** *** * ,其中物化表存储总和和计数,在读取时我们通过除以两者来计算平均值。

这些转换状态主要是字节数组,其内部实现不向用户公开,因此创建它们的唯一方法是将数据反向填充到连续视图正在读取的流中,并让我们的连续查询执行管道重新获得 - 计算它们。

默认情况下禁用对实现表的修改,但您可以通过设置配置参数Private Sub PRIPingIcon_MouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PRIPingIcon.MouseClick If e.Button = Windows.Forms.MouseButtons.Left Then Shell("ping " & PRIBox.Text & " -t", AppWinStyle.NormalFocus) End If Try If My.Computer.Network.Ping(PRIBox.Text) Then 'Online If GetPingMs(PRIBox.Text) < 125 Then 'Good ping PRIPingIcon.Image = My.Resources.PingUP Else 'Bad ping PRIPingIcon.Image = My.Resources.PingHIGH End If Else PRIPingIcon.Image = My.Resources.PingDOWN 'Offline End If Catch End Try End Sub 来启用它们。如果您要截断旧数据或删除要为其回填数据的特定组的数据,这可能很有用。

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