# 52.18.pg_depend

目录pg_depend记录数据库对象之间的依赖关系。该信息允许降低查找哪些其他对象必须被丢弃的命令下降级联或防止掉入删除限制案子。

也可以看看pg_shdepend,它对涉及跨数据库集群共享的对象的依赖项执行类似的功能。

表 52.18.pg_depend

列类型

描述
班级号 样的(参考pg_class.样的)

依赖对象所在的系统目录的 OID,或者零DEPENDENCY_PIN入口
对象 样的(引用任何 OID 列)

特定依赖对象的 OID,或零DEPENDENCY_PIN入口
objsubid 整数4

对于表列,这是列号(对象班级号请参阅表格本身)。对于所有其他对象类型,此列为零。
refclassid 样的(参考pg_class.样的)

被引用对象所在系统目录的 OID
引用对象 样的(引用任何 OID 列)

特定引用对象的 OID
refobjsubid 整数4

对于表列,这是列号(引用对象refclassid请参阅表格本身)。对于所有其他对象类型,此列为零。
部门类型 字符

定义这种依赖关系的具体语义的代码;见文字

在所有情况下,一个pg_dependentry 表示如果不删除依赖对象就不能删除引用的对象。但是,有几种子风味被部门类型

DEPENDENCY_NORMAL(n)

单独创建的对象之间的正常关系。可以删除依赖对象而不影响引用对象。引用的对象只能通过指定来删除级联,在这种情况下,依赖对象也会被删除。示例:表列对其数据类型具有正常依赖性。

DEPENDENCY_AUTO(一种)

依赖对象可以与被引用对象分开删除,并且应该自动删除(无论严格要么级联模式)如果引用的对象被删除。示例:表上的命名约束自动依赖于表,因此如果表被删除,它将消失。

DEPENDENCY_INTERNAL(一世)

依赖对象是作为引用对象创建的一部分而创建的,实际上只是其内部实现的一部分。直接降低的依赖对象将被彻底禁止(我们将告诉用户发出降低而是针对引用的对象)。一种降低被引用对象的删除将导致自动删除依赖对象是否级联是否指定。如果依赖对象由于对某些其他对象的依赖被删除而必须被删除,则它的删除被转换为引用对象的删除,因此普通的汽车依赖对象的依赖项的行为与引用对象的依赖项非常相似。示例:视图的选择规则在内部依赖于视图,防止它在视图保留时被删除。规则的依赖关系(例如它所引用的表)就像视图的依赖关系一样。

DEPENDENCY_PARTITION_PRI()
依赖项分区秒(S)

依赖对象是作为引用对象创建的一部分创建的,实际上只是其内部实现的一部分;然而,与内部的,则有多个这样的引用对象。除非至少删除其中一个引用对象,否则不得删除从属对象;如果有任何一个是依赖对象,则无论是否大量是指定的。也不像内部的,删除依赖对象所依赖的其他对象不会导致自动删除任何分区引用的对象。因此,如果水滴没有通过其他路径级联到这些对象中的至少一个,它将被拒绝。(在大多数情况下,依赖对象与至少一个分区引用对象共享其所有非分区依赖关系,因此此限制不会导致阻止任何级联删除。)主分区依赖项和次分区依赖项的行为相同,但主分区依赖项优先用于错误消息;因此,依赖于分区的对象应该有一个主分区依赖项和一个或多个辅助分区依赖项。请注意,分区依赖关系是对对象通常具有的任何依赖关系的补充,而不是替代。这简化了附加/分离分区操作:只需添加或删除分区依赖项。示例:子分区索引的分区依赖于它所在的分区表和父分区索引,因此,如果其中任何一个被删除,它就会消失,而不是其他。对父索引的依赖是主要的,因此如果用户试图删除子分区索引,错误消息将建议删除父索引(而不是表)。

依赖扩展(e)

从属对象是扩大这是被引用的对象(请参见pg_扩展)。依赖对象只能通过下降延伸在被引用的对象上。从功能上讲,这种依赖关系类型与内部的依赖关系,但为了清晰和简化,它是分开的_倾倒

依赖项自动扩展 (十、)

依赖对象不是作为引用对象的扩展的成员(因此pg不应忽略它)_dump),但如果没有扩展,它将无法运行,如果扩展被删除,它将自动删除。从属对象也可以自行删除。从功能上讲,这种依赖关系类型与汽车依赖关系,但为了清晰和简化,它是分开的_倾倒

佩恩·佩恩 (p)

没有依赖对象;这种类型的条目是一个信号,表明系统本身依赖于引用的对象,因此该对象永远不能被删除。这种类型的条目仅由initdb创建。从属对象的列包含零。

将来可能还需要其他依赖风格。

请注意,两个对象很可能由多个对象链接pg_依赖进入例如,子分区索引既对其关联的分区表具有分区类型依赖,又对其索引的该表的每一列具有自动依赖。这种情况表达了多重依赖语义的结合。可以删除从属对象,而无需大量如果它的任何依赖项满足自动删除的条件。相反,必须满足所有依赖项关于哪些对象必须放在一起的限制。