## 52.46.`pg_shdepend` [](<>) 目录`pg_shdepend`记录数据库对象与共享对象(如角色)之间的依赖关系。此信息允许 PostgreSQL 在尝试删除这些对象之前确保它们未被引用。 也可以看看[`pg_depend`](catalog-pg-depend.html),它对涉及单个数据库中的对象的依赖项执行类似的功能。 与大多数系统目录不同,`pg_shdepend`在集群的所有数据库之间共享:只有一个副本`pg_shdepend`每个集群,而不是每个数据库一个。 **表 52.46.`pg_shdepend`列** | 列类型

描述 | | --------------- | | `出价` `样的`(参考[`pg_database`](catalog-pg-database.html).`样的`)

依赖对象所在的数据库的 OID,或者对于共享对象或`SHARED_DEPENDENCY_PIN`入口 | | `班级号` `样的`(参考[`pg_class`](catalog-pg-class.html).`样的`)

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

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

对于表列,这是列号(`对象`和`班级号`请参阅表格本身)。对于所有其他对象类型,此列为零。 | | `refclassid` `样的`(参考[`pg_class`](catalog-pg-class.html).`样的`)

被引用对象所在系统目录的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`(`吨`) 引用的对象(必须是表空间)作为没有存储的关系的表空间被提及。 将来可能需要其他依赖风格。请特别注意,当前定义仅支持将角色和表空间作为引用对象。