51.18. pg_depend

目录pg_depend记录数据库对象之间的依赖关系。此信息允许DROP命令查找DROP CASCADE必须删除哪些其他对象,或者防止DROP RESTRICT情况下删除。

另请参见pg_shdepend,它对涉及跨数据库群集共享的对象的依赖项执行类似的功能。

表 51.18. pg_depend

NameTypeReferencesDescription
classidoidpg_class.oid从属对象所在的系统目录的 OID
objidoid任何 OID 列特定从属对象的 OID
objsubidint4 对于表列,这是列号(objidclassid表示表本身)。对于所有其他对象类型,此列为零。
refclassidoidpg_class.oid引用对象所在的系统目录的 OID
refobjidoid任何 OID 列特定参考对象的 OID
refobjsubidint4 对于表列,这是列号(refobjidrefclassid表示表本身)。对于所有其他对象类型,此列为零。
deptypechar 定义此依赖关系的特定语义的代码;看到 Literals

在所有情况下,pg_depend条目表示如果不删除依赖对象也不能删除所引用的对象。但是,存在由deptype标识的几种子口味:

  • DEPENDENCY_NORMAL ( n )

    • 单独创建的对象之间的正常关系。可以删除从属对象,而不会影响引用的对象。只能通过指定CASCADE删除引用的对象,在这种情况下,也要删除从属对象。示例:一个表列对其数据类型具有正常的依赖性。
  • DEPENDENCY_AUTO ( a )

    • 可以将依赖对象与引用对象分开删除,并且如果引用对象被删除,则应自动删除(无论RESTRICTCASCADE模式如何)。示例:使表上的命名约束自动依赖于表,因此如果删除表,它将消失。
  • DEPENDENCY_INTERNAL ( i )

    • 从属对象是作为引用对象创建的一部分而创建的,实际上只是其内部实现的一部分。完全禁止使用DROP的从属对象(我们将告诉用户对所引用的对象发出DROP)。无论是否指定了CASCADE,被引用对象的DROP都会传播通过以删除依赖对象。示例:为强制执行外键约束而创建的触发器在内部依赖于约束的pg_constraint条目。
  • DEPENDENCY_EXTENSION ( e )

    • 从属对象是作为引用对象的* extension *的成员(请参见pg_extension)。只能通过DROP EXTENSION删除引用对象上的从属对象。从功能上讲,此依赖类型的作用与内部依赖相同,但为了清晰起见并简化 pg_dump,将其分开。
  • DEPENDENCY_AUTO_EXTENSION ( x )

    • 从属对象不是作为引用对象的扩展的成员(因此,pg_dump 不应将其忽略),但是如果没有它,它将无法运行,并且当扩展本身存在时,应将其删除。依赖对象也可以自行删除。
  • DEPENDENCY_PIN ( p )

    • 没有从属对象。这种类型的 Importing 表明系统本身依赖于引用的对象,因此绝不能删除该对象。此类型的条目仅由initdb创建。从属对象的列包含零。

将来可能需要其他依赖项。