跳转至

pg_depend

pg_depend

pg_depend系统目录表记录数据库对象之间依赖关系。 此信息允许DROP命令查找哪些其他对象必须由DROP CASCADE删除或者必须防止在DROP RESTRICT情况中被删除。 另请参见pg_shdepend,它对涉及SeaboxMPP系统共享对象的依赖执行类似的功能。

在所有的情况下,pg_depend项表示在不删除依赖对象的前提下也不能删除被引用对象。 不过,有几种由deptype区分的子类型:

DEPENDENCY_NORMAL (n)

单独创建的对象之间的正常关系。 可以删除依赖对象而不影响被引用的对象。被引用对象只能通过指定CASCADE来删除,在这种情况下依赖对象也会被删除。

例如:表列对其数据类型具有正常的依赖性。

DEPENDENCY_AUTO (a)

依赖对象可以独立于被引用对象而删除,并且如果被引用对象被删除,则依赖对象应该自动被删除(不管是RESTRICT还是CASCADE模式)。

例如:表上的命名约束自动依赖表,因此如果表被删除,该约束也将消失。

DEPENDENCY_INTERNAL (i)
依赖对象作为被引用对象的一部分创建,实际只是其内部实现的一部分。 依赖对象的DROP操作将被完全禁止(我们会告诉用户针对被引用对象发出DROP命令来代替)。 被引用对象的DROP命令会被传播以删除依赖对象,不管是否指定CASCADE(级联删除)。
DEPENDENCY_PIN (p)
没有依赖对象;这种类型的条目是系统本身依赖于引用对象的信号,因此绝不能删除该对象。 此类型的条目仅由系统初始化创建。从属对象的列包含零。
类型 参考 描述
classid oid pg_class.oid 依赖对象所在的系统目录的OID。
objid oid any OID column 特定依赖对象的OID。
objsubid int4 对于表列,这是列编号。 对于其他对象类型,此列为0。
refclassid oid pg_class.oid 被引用对象所在的系统目录的OID。
refobjid oid any OID column 特定被引用对象的OID。
refobjsubid int4 对于表列,这是被引用的列编号。 对于其他对象类型,该列为0。
deptype char 定义此依赖关系的特定语义的代码。
Table 1. pg_catalog.pg_depend