DROP VIEW CASCADE

时间:2017-09-21 08:11:44

标签: postgresql view

使用DROP VIEW xxx CASCADE时,除了其他视图之外,还有其他任何可以删除的对象吗?

Documentation并未澄清太多:

  

CASCADE

     

自动删除依赖于视图的对象(例如其他视图),

1 个答案:

答案 0 :(得分:1)

有大量的可以删除的对象类型,但很少有你可能会遇到的对象类型。

视图可能会被其他视图,物化视图或规则直接引用。 (函数内部的引用未被跟踪,因此CASCADE不会接受它们;它们只会在运行时失败。)

最重要的是,每个视图v都有一个关联的复合数据类型v和数组类型v[],它们可以用作表中列的类型,或者参数/函数的返回,CASCADE也会选择它们。

这扩展到包含某个值表达式的每个对象定义,因为它可能包含此类型的强制转换:列默认值,类型默认值,触发条件,RLS策略,索引表达式和检查约束。如果它们引用视图的OID('v'::regclass)或类型('v'::regtype'v[]'::regtype),它们也会被删除。

当然,从那里它会保持级联,所以DROP VIEW可以取出的对象类型列表会很长。

但除了文档中提到的案例外,我怀疑你是否正在做这些事情;他们决定不详细说明我并不感到惊讶......