# 52.46.pg_shdepend

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

也可以看看pg_depend,它对涉及单个数据库中的对象的依赖项执行类似的功能。

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

表 52.46.pg_shdepend

列类型

描述
出价 样的(参考pg_database.样的)

依赖对象所在的数据库的 OID,或者对于共享对象或SHARED_DEPENDENCY_PIN入口
班级号 样的(参考pg_class.样的)

依赖对象所在的系统目录的 OID,或者零SHARED_DEPENDENCY_PIN入口
对象 样的(引用任何 OID 列)

特定依赖对象的 OID,或零SHARED_DEPENDENCY_PIN入口
objsubid 整数4

对于表列,这是列号(对象班级号请参阅表格本身)。对于所有其他对象类型,此列为零。
refclassid 样的(参考pg_class.样的)

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

特定引用对象的 OID
部门类型 字符

定义这种依赖关系的具体语义的代码;见文字

在所有情况下,一个pg_shdependentry 表示如果不删除依赖对象就不能删除引用的对象。但是,有几种子风味被部门类型

SHARED_DEPENDENCY_OWNER()

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

SHARED_DEPENDENCY_ACL(一种)

被引用对象(必须是角色)在依赖对象的ACL(访问控制列表,即权限列表)中被提及。(一种SHARED_DEPENDENCY_ACL不为对象的所有者创建条目,因为所有者将拥有一个SHARED_DEPENDENCY_OWNER无论如何都要进入。)

SHARED_DEPENDENCY_POLICY(r)

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

SHARED_DEPENDENCY_PIN(p)

没有依赖对象;这种类型的条目表明系统本身依赖于引用的对象,因此永远不能删除该对象。此类型的条目仅由 initdb 创建。从属对象的列包含零。

SHARED_DEPENDENCY_TABLESPACE()

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

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