PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

52.48. pg_shdepend #

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

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

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

Table 52.48. \1 字段列说明

Column Type

Description

dbid oid (references pg_database.oid)

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

classid oid (references pg_class.oid)

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

objid oid (引用任意 OID 列)

依赖的具体对象的 OID

objsubid int4

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

refclassid oid (references 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_INITPrivS (i)

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

SHARED_DEPENDENCY_POLICY (r)

被引用对象(必须是一个角色)作为某个依赖策略对象的目标被提到。

SHARED_DEPENDENCY_TABLESPACE (t)

被引用对象(必须是一个表空间)作为某个没有存储的关系的 表空间被提到。

将来可能需要其他依赖子类型。特别要注意,当前的定义只支持角色和表空间作为被引用对象(此外还支持作为 initdb 期间创建对象的数据库)。

与 pg_depend 目录一样, 在 initdb 期间创建的大多数对象 被视为“被钉住的”。在 pg_shdepend 中不会创建任何 把被钉住对象作为被引用对象或依赖对象的条目。