如何在深度复制 table 时迁移依赖视图

How to migrate dependent views when deep copying the table

我正在将 distkey/sortkey 添加到我在 redshift 中的所有表,并希望将其自动化。我正在执行以下操作:

ALTER TABLE table RENAME TO tmp_table;
CREATE TABLE table 
distkey(id) 
sortkey(id) 
AS 
select * from tmp_table;
DROP TABLE tmp_table;

效果很好,只是视图不会迁移。当您更改 TABLE 时,现有视图将指向 tmp_table。理想情况下,我想将视图恢复到以前的方式,可能在同一查询事务中或作为脚本的一部分。

只需删除并重新创建视图。这可能是脚本的一部分。

视图可能不构成事务的一部分,因此可能需要进行一些测试。

在您的迁移过程中:

  1. 对于每个视图执行:

    select definition from pg_views where viewname = 'my_view';
    
  2. 并存储所有结果。

  3. 对所有视图执行:

    drop view 'my_view'; // or rename only to have a rollback option
    
  4. 改变你的表格

  5. 执行步骤2得到的创建视图命令