# 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_shdepend
entry 表示如果不删除依赖对象就不能删除引用的对象。但是,有几种子风味被部门类型
:
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
(吨
)
引用的对象(必须是表空间)作为没有存储的关系的表空间被提及。
将来可能需要其他依赖风格。请特别注意,当前定义仅支持将角色和表空间作为引用对象。