2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 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

52.48. pg_shdepend #

目录 pg_shdepend 记录了数据库对象与共享对象(例如角色)之间的依赖关系。这些信息允许 PostgreSQL 在尝试删除对象之前确保这些对象未被引用。

另请参见 pg_depend,它对单个数据库内对象之间的依赖关系执行类似的功能。

与大多数系统目录不同,pg_shdepend 在集群的所有数据库之间共享:每个集群只有一份 pg_shdepend 的副本,而不是每个数据库一份。

表 52.48. pg_shdepend

列 类型

描述

dbid oid (引用 pg_database.oid)

依赖对象所在的数据库的 OID,对于共享对象为零

classid oid(引用 pg_class.oid

依赖对象所在的系统目录的 OID

objid oid(引用任何 OID 列)

特定依赖对象的 OID

objsubid int4

对于表列,这是列号(objidclassid 指的是表本身)。对于所有其他对象类型,此列为零。

refclassid oid (引用 pg_class.oid)

被引用对象所在的系统目录的 OID(必须是共享目录)

refobjid oid (引用任何 OID 列)

特定被引用对象的 OID

deptype char

一个代码,定义此依赖关系的具体语义;参见文本


在所有情况下,pg_shdepend 条目都表示在删除依赖对象之前不能删除被引用对象。但是,deptype 标识了几种子类型:

SHARED_DEPENDENCY_OWNER (o)

被引用对象(必须是角色)是依赖对象的所有者。

SHARED_DEPENDENCY_ACL (a)

被引用对象(必须是角色)在依赖对象的ACL中被提及。(对于对象的所有者,不会创建 SHARED_DEPENDENCY_ACL 条目,因为所有者已经有 SHARED_DEPENDENCY_OWNER 条目。)

SHARED_DEPENDENCY_INITACL (i)

被引用对象(必须是角色)在依赖对象的 pg_init_privs 条目中被提及。

SHARED_DEPENDENCY_POLICY (r)

被引用对象(必须是角色)被提及为依赖的策略对象的目标。

SHARED_DEPENDENCY_TABLESPACE (t)

被引用对象(必须是表空间)被提及为没有存储的关系的表空间。

将来可能需要其他依赖类型。特别要注意的是,当前定义仅支持角色和表空间作为被引用对象。

pg_depend 目录类似,在 initdb 期间创建的大多数对象都被认为是 固定 的。在 pg_shdepend 中不会创建任何会将固定对象作为被引用对象或依赖对象创建的条目。

提交更正

如果您在文档中发现任何不正确的内容、与您在使用特定功能时的经验不符或需要进一步澄清的内容,请使用 此表格 报告文档问题。