选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

52.47. pg_shdepend #

目录pg_shdepend记录数据库对象和共享对象之间的依赖关系,例如角色。这些信息使得PostgreSQL可以确保对象在被删除时没有被其他对象引用。

另请参阅pg_depend,它对单个数据库中对象之间的依赖提供了相似的功能。

与大部分其他系统目录不同,pg_shdepend在整个集簇的所有数据库之间共享:在每一个集簇中只有一个pg_shdepend的拷贝,而不是每个数据库一份。

Table 52.47. pg_shdepend

Name 类型 引用 描述
dbid oid pg_database.oid 依赖对象所在数据库的OID,对于共享对象为零
classid oid pg_class.oid 依赖对象所在系统目录的OID
objid oid 任意 OID 列 特定依赖对象的OID
objsubid int4   对于一个表列,这将是列号(objidclassid指向表本身)。对于所有其他对象类型,该列值为0。
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_PIN (p)

不存在依赖对象;这种项表示系统本身依赖于被引用对象,因此该对象绝不能删除。 这种项只由initdb创建。用于表示依赖对象的各列包含零。

SHARED_DEPENDENCY_TABLESPACE (t)

被引用对象(必须是一个表空间)被提及为某个不具有存储的关系所使用的表空间。

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