↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
历史版本。 PostgreSQL 11 已结束支持。 2023-11-09. 请参阅 当前版本手册.

52.18. pg_depend #

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

另请参阅 pg_shdepend,它对涉及数据库集簇共享对象的依赖提供了相似的功能。

表 52.18. pg_depend 列

名称类型引用 描述
classidoidpg_class.oid 依赖对象所在系统目录的 OID
objidoid任意 OID 列 特定依赖对象的 OID
objsubidint4  对于一个表列,这里是列号(objid 和 classid 指表本身)。对于所有其他对象类型,此列为 0。
refclassidoidpg_class.oid 被引用对象所在的系统目录的 OID
refobjidoid任意 OID 列 指定被引用对象的 OID
refobjsubidint4  对于一个表列,这里是列号(refobjid 和 refclassid 指表本身)。对于所有其他对象类型,此列为 0。
deptypechar  定义此依赖关系语义的一个代码,见下文

在所有情况下,pg_depend 中的条目都表示:如果不同时删除依赖对象,就不能删除被引用对象。不过,还存在若干由 deptype 标识的子类型:

DEPENDENCY_NORMAL(n)

两个独立创建的对象之间的正常关系。依赖对象可以被删除而不影响被引用对象。被引用对象只能通过指定 CASCADE 来删除,这样依赖对象也会被删除。例如:表列对其数据类型有一个正常依赖关系。

DEPENDENCY_AUTO (a)

依赖对象可以与被引用对象分开删除,并且在被引用对象删除时应自动删除(无论使用 RESTRICT 还是 CASCADE 模式)。例如,表上的命名约束会自动依赖于该表,因此删除表时该约束也会消失。

DEPENDENCY_INTERNAL(i)

依赖对象作为被引用对象创建过程的一部分而创建,实际上只是其内部实现的一部分。对依赖对象执行 DROP 会被直接禁止(我们会告诉用户改为对被引用对象执行 DROP)。对被引用对象执行 DROP 会传播到依赖对象,使其被删除,无论是否指定 CASCADE。例如,为实施外键约束而创建的触发器会在内部依赖于该约束的 pg_constraint 项。

DEPENDENCY_INTERNAL_AUTO (I)

依赖对象作为被引用对象创建过程的一部分而创建,实际上只是其内部实现的一部分。对依赖对象执行 DROP 会被直接禁止(我们会告诉用户改为对被引用对象执行 DROP)。对于普通内部依赖,只要还有任何这样的依赖关系存在,就不能删除依赖对象;而 DEPENDENCY_INTERNAL_AUTO 允许删除,只要沿这些依赖关系中的任意一个能够找到该对象。例如,分区上的索引既以内部自动方式依赖于分区本身,也依赖于父分区表上的索引;因此,无论删除该分区索引所索引的分区,还是删除它所附属的父索引,都会一并删除该分区索引。

DEPENDENCY_EXTENSION(e)

依赖对象是作为被引用对象的扩展的一个成员(参见 pg_extension)。只能通过对被引用对象执行 DROP EXTENSION 来删除依赖对象。在功能上,这种依赖类型与内部依赖相同,但为了清晰和简化 pg_dump 而单独区分。

DEPENDENCY_AUTO_EXTENSION(x)

依赖对象不是作为被引用对象的扩展的成员(因此 pg_dump 不应忽略它),但它无法在没有该扩展的情况下运行,所以删除扩展时也应删除它。依赖对象也可以单独删除。

DEPENDENCY_PIN (p)

不存在依赖对象;这种项表示系统本身依赖于被引用对象,因此该对象绝不能删除。这种项只由 initdb 创建。用于表示依赖对象的各列包含零。

未来可能需要其他依赖关系的变种。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.