pg_shdepend
目录pg_shdepend
记录数据库对象和共享对象之间的依赖关系,例如角色。这些信息使得PostgreSQL可以确保对象在被删除时没有被其他对象引用。
另请参阅pg_depend
,它对单个数据库中对象之间的依赖提供了相似的功能。
与大部分其他系统目录不同,pg_shdepend
在整个集簇的所有数据库之间共享:在每一个集簇中只有一个pg_shdepend
的拷贝,而不是每个数据库一份。
表 51.47. pg_shdepend
的列
名称 | 类型 | 引用 | 描述 |
---|---|---|---|
dbid | oid |
| 依赖者对象所在的数据库OID,如果是一个共享对象则值为0 |
classid | oid |
| 依赖者对象所在的系统目录的OID |
objid | oid | 任意OID列 | 依赖者对象的OID |
objsubid | int4 | 对于一个表列,这将是列号(objid 和classid 指向表本身)。对于所有其他对象类型,该列值为0。
| |
refclassid | 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_POLICY
(r
)作为一个依赖策略对象的目标被引用的对象(必须是一个角色)。
SHARED_DEPENDENCY_PIN
(p
) 没有依赖对象,这种类型的项是一个信号,用来指示系统本身依赖于被引用对象,并且因此该对象必须永远不能被删除。这种类型的项只能被initdb
创建。这种项中关于依赖对象的列值都为0。
未来可能会需要其他的依赖类型。特别要注意的是在当前定义中只支持角色作为被引用对象。