支持的版本: 当前 (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

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)

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

SHARED_DEPENDENCY_TABLESPACE (t)

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

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

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

提交更正

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