pg_shdepend #
目录 pg_shdepend 记录数据库对象与共享对象
(例如角色)之间的依赖关系。该信息使
PostgreSQL 能够在尝试删除这些对象之前
确保它们没有被引用。
另见 pg_depend,
它对涉及单个数据库内对象的依赖执行类似的功能。
与大多数系统目录不同,pg_shdepend
在一个集群的所有数据库之间共享:每个集群只有一份
pg_shdepend,而不是每个数据库一份。
Table 52.48. \1 字段列说明
Column Type Description |
|---|
依赖对象所在数据库的 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_INITPrivS (i)
被引用对象(必须是一个角色)在依赖对象的某个
pg_init_privs
条目中被提到。
SHARED_DEPENDENCY_POLICY (r)被引用对象(必须是一个角色)作为某个依赖策略对象的目标被提到。
SHARED_DEPENDENCY_TABLESPACE (t)被引用对象(必须是一个表空间)作为某个没有存储的关系的 表空间被提到。
将来可能需要其他依赖子类型。特别要注意,当前的定义只支持角色和表空间作为被引用对象(此外还支持作为 initdb 期间创建对象的数据库)。
与 pg_depend 目录一样,
在 initdb 期间创建的大多数对象
被视为“被钉住的”。在
pg_shdepend 中不会创建任何
把被钉住对象作为被引用对象或依赖对象的条目。