Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

51.48. pg_shdepend #

51.48. pg_shdepend #

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

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

表 51.48. pg_shdepend

列类型

描述

dbid oid(引用 pg_database.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_INITACL (i)

被引用对象(必须是一个角色)在依赖对象的 pg_init_privs 条目中被提及。

SHARED_DEPENDENCY_POLICY (r)

所引用的对象(必须是角色)被提到是相关策略对象的 target。

SHARED_DEPENDENCY_TABLESPACE (t)

所引用的对象(必须是表空间)被提到是未存储关系的表空间。

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

pg_depend 目录中,在 initdb 期间创建的大部分对象都是 pinned。在 pg_shdepend 中不会创建将固定对象作为所引用对象或相关对象的任何条目。