Skip to content

53.48.pg_shdepend#

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

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

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

表 53.48.pg_shdepend

列类型

说明

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)

引用的对象(必须是角色)被提及为依赖策略对象的 target。

SHARED_DEPENDENCY_TABLESPACE (t)

引用的对象(必须是表空间)被提及为没有存储空间的关系的表空间。

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

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