catalog-pg-shdepend.md 2.7 KB
Newer Older
李少辉-开发者's avatar
李少辉-开发者 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
## 52.46.`pg_shdepend`

[](<>)

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

也可以看看[`pg_depend`](catalog-pg-depend.html),它对涉及单个数据库中的对象的依赖项执行类似的功能。

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

**表 52.46.`pg_shdepend`列**

| 列类型<br/><br/>描述 |
| --------------- |
| `出价` `样的`(参考[`pg_database`](catalog-pg-database.html).`样的`)<br/><br/>依赖对象所在的数据库的 OID,或者对于共享对象或`SHARED_DEPENDENCY_PIN`入口 |
| `班级号` `样的`(参考[`pg_class`](catalog-pg-class.html).`样的`)<br/><br/>依赖对象所在的系统目录的 OID,或者零`SHARED_DEPENDENCY_PIN`入口 |
| `对象` `样的`(引用任何 OID 列)<br/><br/>特定依赖对象的 OID,或零`SHARED_DEPENDENCY_PIN`入口 |
| `objsubid` `整数4`<br/><br/>对于表列,这是列号(`对象``班级号`请参阅表格本身)。对于所有其他对象类型,此列为零。 |
| `refclassid` `样的`(参考[`pg_class`](catalog-pg-class.html).`样的`)<br/><br/>被引用对象所在系统目录的OID(必须是共享目录) |
| `引用对象` `样的`(引用任何 OID 列)<br/><br/>特定引用对象的 OID |
| `部门类型` `字符`<br/><br/>定义这种依赖关系的具体语义的代码;见文字 |

在所有情况下,一个`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`(`吨`)

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

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