2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 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

51.48. pg_shdepend #

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

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

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

表 51.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)

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

SHARED_DEPENDENCY_TABLESPACE (t)

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

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

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

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表单 报告文档问题。