如何在深度复制 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。理想情况下,我想将视图恢复到以前的方式,可能在同一查询事务中或作为脚本的一部分。
只需删除并重新创建视图。这可能是脚本的一部分。
视图可能不构成事务的一部分,因此可能需要进行一些测试。
在您的迁移过程中:
对于每个视图执行:
select definition from pg_views where viewname = 'my_view';
并存储所有结果。
对所有视图执行:
drop view 'my_view'; // or rename only to have a rollback option
改变你的表格
执行步骤2得到的创建视图命令
我正在将 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。理想情况下,我想将视图恢复到以前的方式,可能在同一查询事务中或作为脚本的一部分。
只需删除并重新创建视图。这可能是脚本的一部分。
视图可能不构成事务的一部分,因此可能需要进行一些测试。
在您的迁移过程中:
对于每个视图执行:
select definition from pg_views where viewname = 'my_view';
并存储所有结果。
对所有视图执行:
drop view 'my_view'; // or rename only to have a rollback option
改变你的表格
执行步骤2得到的创建视图命令