更新时间:2022-08-16 GMT+08:00

PG_SHDEPEND

PG_SHDEPEND系统表记录数据库对象和共享对象(比如角色)之间的依赖关系。这些信息使得GaussDB(DWS)可以确保对象在被删除时没有被其他对象引用。

PG_DEPEND的作用类似,只是它是针对单个数据库中对象之间的依赖。

和大多数其他系统表不同,PG_SHDEPEND在集群的所有数据库之间共享:每个数据库集群只有一个PG_SHDEPEND,并非每个数据库一个。

表1 PG_SHDEPEND字段

名字

类型

引用

描述

dbid

oid

PG_DATABASE.oid

依赖对象所在的数据库的OID ,如果是共享对象,则为0。

classid

oid

PG_CLASS.oid

依赖对象所在的系统表的OID。

objid

oid

任意OID属性

指定的依赖对象的OID。

objsubid

integer

-

对于一个表字段,为字段号(objid和classid参考表本身)。对于所有其他对象类型,该字段为0。

refclassid

oid

PG_CLASS.oid

被引用对象所在的系统表的OID(必须是一个共享表)。

refobjid

oid

任意OID属性

指定的被引用对象的OID。

deptype

"char"

-

定义该依赖关系的特定语义的代码见表后说明。

objfile

text

-

用户定义C函数库文件路径。

在任何情况下,一条PG_SHDEPEND记录就表明被引用的对象不能在未删除依赖对象的前提下被删除。但是其中也有几种依赖类型由deptype定义的情况:

  • SHARED_DEPENDENCY_OWNER (o)

    被引用的对象(必须是一个角色)是依赖对象的所有者。

  • SHARED_DEPENDENCY_ACL (a)

    在依赖对象的ACL(访问控制列表,也就是权限列表)中提到被引用的对象(必须是一个角色)。不会为对象的所有者创建SHARED_DEPENDENCY_ACL,因为所有者将具有SHARED_DEPENDENCY_OWNER记录。

  • SHARED_DEPENDENCY_PIN (p)

    没有依赖对象。这类记录标识系统自身依赖于被依赖对象,因此这种对象绝对不能被删除。此类型的记录只能被initdb创建,依赖对象的字段都为0。