2017-04-04 103 views
0

我想更改物化视图的一个字段中的值构造。 (例如,对文本字段使用UPPER()而不是LOWER())视图的任何字段类型和任何属性都不受影响。 问题在于此物化视图是主视图。一些视图依赖于它并且视图依赖于这些视图等等。所以放弃这个视图是不可能的,因为有超过30个依赖视图。 一个不好的解决方案是以正确的顺序删除30个视图,并(重新)创建30个视图。在PostgreSQL 9.3中编辑物化视图(如果其他视图依赖于它)

一个很好的解决方案是在一个事务中封装删除和创建主视图,并挂起这段时间的依赖关系检查。但似乎这在PostgreSQL 9.3中是不可能的。我对吗?

回答

0

唯一的解决方案是删除并重新创建所有依赖于物化视图的视图。

0

不幸的是,你不能“暂停依赖检查”的意见。 (尽管你可以为存储过程做类似的事情)。

如果只有几个视图直接依赖于这个物化视图,但更多取决于这些(更进一步的依赖链),那么只需用虚拟替换直接依赖关系(如果这些依赖关系没有实现)值:

CREATE OR REPLACE VIEW immediate_dependecy_1 AS 
    SELECT NULL::uuid col_alias_1, 
     NULL::int col_alias_2, 
     NULL::text col_alias_3, 
     ... 

:这只会工作,当列名&类型不使用此CREATE OR REPLACE VIEW改变。从技术角度来看,您可以在已有的列之后添加更多的列。

更换直接依赖后,你可以将&重新创建物化视图,然后恢复原来的逻辑,这些直接依赖关系了。