pg_shdepend
目录pg_shdepend
记录数据库对象和共享对象之间的依赖关系,例如角色。这些信息使得PostgreSQL可以确保对象在被删除时没有被其他对象引用。
另请参阅pg_depend
,它对单个数据库中对象之间的依赖提供了相似的功能。
与大部分其他系统目录不同,pg_shdepend
在整个集簇的所有数据库之间共享:在每一个集簇中只有一个pg_shdepend
的拷贝,而不是每个数据库一份。
表 53.48. pg_shdepend
Columns
列类型 描述 |
---|
依赖对象所在数据库的OID,对于共享对象为零 |
依赖对象所在系统目录的OID |
特定依赖对象的OID |
对于一个表列,这将是列号( |
被引用对象所在的系统目录的OID(必须是一个共享的目录) |
指定被引用对象的OID |
定义此依赖关系语义的一个代码,见文本 |
在所有情况下,pg_shdepend
条目表示引用对象不能被删除,否则依赖对象也会被删除。
然而,有几种由deptype
标识的子类型:
SHARED_DEPENDENCY_OWNER
(o
)被引用的对象(必须是一个角色)是依赖对象的所有者。
SHARED_DEPENDENCY_ACL
(a
)
被引用的对象(必须是一个角色)在依赖对象的ACL(访问控制列表,即权限列表)中被提及。
(对于对象的所有者,不会为其创建SHARED_DEPENDENCY_ACL
条目,因为所有者将会有一个SHARED_DEPENDENCY_OWNER
条目。)
SHARED_DEPENDENCY_POLICY
(r
)被引用的对象(必须是一个角色)被提及作为一个依赖策略对象的目标。
SHARED_DEPENDENCY_TABLESPACE
(t
)被引用的对象(必须是一个表空间)被提及作为一个没有存储的关系的表空间。
未来可能需要其他依赖类型。特别注意,当前定义仅支持角色和表空间作为被引用对象。
与pg_depend
目录中一样,在initdb期间创建的大多数对象被视为“固定(pinned)”。
在pg_shdepend
中不会有任何条目,这些条目将使一个被固定(pinned)的对象成为被引用或依赖的对象。