PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 48. 系统表 | 下一页

# 48.41. `pg_shdepend`

`pg_shdepend`记录数据库对象和共享对象(比如角色)之间的依赖性关系。 这些信息允许PostgreSQL保证在企图删除这些对象之前， 这些对象是没有被引用的。

`pg_depend`表的作用类似， 只是它是用于在一个数据库内部的对象的依赖性关系的。

和其它大多数系统表不同，`pg_shdepend`是在集群里面所有的数据库之间共享的： 每个数据库集群只有一个`pg_shdepend`，而不是每个数据库一个。

表 48-41. `pg_shdepend` 字段

名字 | 类型 | 引用 | 描述
--- | --- | --- | ---
`dbid` | `oid` | ``pg_database`.oid` | 依赖对象所在的数据库的 OID ，如果是共享对象，则为零
`classid` | `oid` | ``pg_class`.oid` | 依赖对象所在的系统表的 OID
`objid` | `oid` | 任意 oid 属性 | 指定的依赖对象的 OID
`objsubid` | `int4` |  | 对于一个表字段，这是字段号（`objid`和`classid` 参考表本身）。对于所有其他对象类型，这个字段为零。
`refclassid` | `oid` | ``pg_class`.oid` | 被引用对象所在的系统表的 OID(必须是一个共享表)
`refobjid` | `oid` | 任意 oid 属性 | 指定的被引用对象的 OID
`deptype` | `char` |  | 一段代码，定义了这个依赖性关系的特定语义；参阅下文。

在任何情况下，一条`pg_shdepend` 记录就表明这个被引用的对象不能在未删除依赖对象的前提下删除。 不过，`deptype`同时还标出了几种不同的子风格：

`SHARED_DEPENDENCY_OWNER` (`o`)

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

`SHARED_DEPENDENCY_ACL` (`a`)

  被引用的对象(必须是一个角色)在依赖对象的 ACL(访问控制列表，也就是权限列表)里提到。 `SHARED_DEPENDENCY_ACL`不会在对象的所有者头上添加的，因为所有者会有一个 `SHARED_DEPENDENCY_OWNER`记录。

`SHARED_DEPENDENCY_PIN` (`p`)

  没有依赖对象；这类记录标识系统自身依赖于该被依赖对象，因此这样的对象绝对不能被删除。 这种类型的记录只是由`initdb`创建。这样的依赖对象的字段都是零。

其它依赖性的风格可能在将来会出现。请注意，目前的定义只是支持把角色当作被引用对象。

上一页 | 起始页 | 下一页
`pg_seclabel` | 上一级 | `pg_shdescription`