PostgreSQL 8.2.3 中文文档
后退快退章43. 系统表快进前进

43.29. pg_shdepend

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

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

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

表43-29. pg_shdepend 字段

名字类型引用描述
dbidoidpg_database.oid依赖对象所在的数据库的 OID ,如果是共享对象,则为零
classidoidpg_class.oid依赖对象所在的系统表的 OID
objidoid任意 oid 属性指定的依赖对象的 OID
refclassidoidpg_class.oid被引用对象所在的系统表的 OID(必须是一个共享表)
refobjidoid任意 oid 属性指定的被引用对象的 OID
deptypechar 一段代码,定义了这个依赖性关系的特定语义;参阅下文。

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

SHARED_DEPENDENCY_OWNER (o)

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

SHARED_DEPENDENCY_ACL (a)

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

SHARED_DEPENDENCY_PIN (p)

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

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


后退首页前进
pg_rewrite上一级pg_shdescription