【问题标题】:which objects can be dropped by DROP VIEW CASCADEDROP VIEW CASCADE 可以删除哪些对象
【发布时间】:2017-09-21 08:11:44
【问题描述】:

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

Documentation 没有过多澄清:

级联

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

【问题讨论】:

  • 也许是一个运行视图的函数。您可以检查哪些对象依赖于视图,只需运行“drop view xxx”,如果有任何依赖对象,它将抱怨它并列出所有依赖对象。
  • 链接部分中有更多信息:postgresql.org/docs/current/static/ddl-depend.html 我想找出最简单的方法是运行drop without 级联并阅读错误消息(按照手册中的建议)
  • @a_horse_with_no_name 但它没有解释哪些对象可以依赖于视图

标签: postgresql view


【解决方案1】:

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

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

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

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

当然,从那里它会继续级联,所以可以被DROP VIEW 取出的对象类型列表会变得很长。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2016-11-10
    相关资源
    最近更新 更多