Postgresql 中文操作指南

53.48. pg_shdepend #

目录 pg_shdepend 记录了数据库对象和共享对象(如角色)之间的依赖关系。PostgreSQL 可以通过这些信息来确保在尝试删除这些对象之前,它们没有引用。

另请参阅 pg_depend ,它为单个数据库内涉及对象的依赖关系执行类似的功能。

与大多数系统目录不同,pg_shdepend 在群集的所有数据库中共享:每个群集只有一个 pg_shdepend 副本,而不是每个数据库一个。

Table 53.48. pg_shdepend Columns

Column Type

Description

dbid oid (引用 pg_database . oid )从属对象所在的数据库的 OID,或共享对象的 OID 为零

classid oid (引用 pg_class . oid )从属对象所在的系统目录的 OID

objid oid (引用任何 OID 列)特定从属对象的 OID

objsubid int4 对于表列,这是列号( objidclassid 引用表格本身)。对于所有其他对象类型,此列均为零。

refclassid oid (引用 pg_class . 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_TABLESPACE (t)

    • 所引用的对象(必须是表空间)将被提及为不存储的关联的表空间。

将来可能需要其他依赖关系类别。特别注意,当前定义仅支持角色和表空间作为引用对象。

pg_depend 目录类似,在 initdb 期间创建的大多数对象都被视为“固定的”。在 pg_shdepend 中不会创建任何以固定对象作为引用对象或依赖对象的项。