51.48. 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 期间创建的大多数对象被视为“固定(pinned)”。不会在 pg_shdepend 中创建以固定对象作为被引用对象或依赖对象的条目。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.