2017-09-21 85 views
1

当使用DROP VIEW xxx CASCADE时,除了其他视图之外是否还有其他对象可以删除?哪些对象可以通过删除查看CASCADE删除

Documentation没有说明太多:

CASCADE

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

+0

也许是一个运行视图的函数。您可以检查依赖于视图的对象,只需运行“drop view xxx”,并且如果有任何依赖对象,它会投诉它并列出所有依赖对象。 –

+1

更多信息位于链接部分:https://www.postgresql.org/docs/current/static/ddl-depend.html我想找出最简单的方法是运行'drop' _without_ cascade并阅读该错误消息(如手册中所建议的) –

+0

@a_horse_with_no_name但在那里它不能解释什么对象可以依赖于视图 – alostale

回答

1

内有一个巨大可能被丢弃的对象类型数量,但您很可能遇到的数量很少。

视图可能被其他视图,物化视图或规则直接引用。 (从函数内的提及并不跟踪,所以CASCADE不会接他们;他们就会失败在运行时)

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

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

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

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