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