我想在物化视图的一个字段中更改值构造。 (例如,对文本字段使用UPPER()而不是LOWER())字段类型和视图的任何属性都不会受到影响。 问题是这个物化视图是主视图。一些视图依赖于它,视图依赖于这些视图等。因此,由于超过30个依赖视图,因此无法删除此视图。 一个丑陋的解决方案是以正确的顺序删除30个视图并(重新)创建30个视图。
一个很好的解决方案是在一个事务中删除和创建主视图的封装,并暂停此期间的依赖性检查。但似乎在PostgreSQL 9.3中这是不可能的。我是对的吗?
答案 0 :(得分:0)
唯一的解决方案是删除并重新创建依赖于物化视图的所有视图。
答案 1 :(得分: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
更改。从技术角度来看,您可以在已有的列之后添加更多列。
替换直接依赖项后,您可以删除&重新创建物化视图,然后还原这些直接依赖项的原始逻辑。