pg_shdepend
#目录 pg_shdepend
记录了数据库对象和共享对象(例如角色)之间的依赖关系。此信息允许 PostgreSQL 确保在尝试删除这些对象之前,它们没有被引用。
另请参阅 pg_depend
,它为涉及单个数据库内对象的依赖关系执行类似的功能。
与大多数系统目录不同,pg_shdepend
在集群的所有数据库中共享:每个集群只有一个 pg_shdepend
的副本,而不是每个数据库一个。
表 51.48. pg_shdepend
列
列名 类型 描述 |
---|
依赖对象所在的数据库的 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_INITACL
(i
)被引用对象(必须是角色)在依赖对象的 pg_init_privs
条目中被提及。
SHARED_DEPENDENCY_POLICY
(r
)被引用对象(必须是角色)被提及为依赖策略对象的目标。
SHARED_DEPENDENCY_TABLESPACE
(t
)被引用对象(必须是表空间)被提及为不具有存储的关系的表空间。
将来可能需要其他依赖关系类型。请特别注意,当前的定义仅支持角色和表空间作为被引用对象。
与 pg_depend
目录一样,在 initdb 期间创建的大多数对象都被认为是 “已钉住” 的。不会在 pg_shdepend
中创建任何以已钉住对象作为被引用对象或依赖对象的条目。
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表单报告文档问题。