
# PG_SHDEPEND
PG_SHDEPEND系统表记录数据库对象和共享对象（比如角色）之间的依赖关系。记录的这些信息使DWS可以确保对象在被删除时没有被其他对象引用。
[PG_DEPEND](https://support.huaweicloud.com/devg-dws/dws_04_0585.html)的作用类似，只是它是针对单个数据库中对象之间的依赖。
和大多数其他系统表不同，PG_SHDEPEND在集群的所有数据库之间共享：每个数据库集群只有一个PG_SHDEPEND，并非每个数据库一个。
表1PG_SHDEPEND字段 
| 名字         | 类型      | 引用                                                                           | 描述                                                 |
|:---|:---|:---|:---|
| dbid       | oid     | [PG_DATABASE](https://support.huaweicloud.com/devg-dws/dws_04_0582.html).oid | 依赖对象所在的数据库的OID ，如果是共享对象，则为0。                       |
| classid    | oid     | [PG_CLASS](https://support.huaweicloud.com/devg-dws/dws_04_0578.html).oid    | 依赖对象所在的系统表的OID。                                    |
| objid      | oid     | 任意OID属性                                                                      | 指定的依赖对象的OID。                                       |
| objsubid   | integer | -                                                                            | 对于一个表字段，为字段号（objid和classid参考表本身）。对于所有其他对象类型，该字段为0。 |
| refclassid | oid     | [PG_CLASS](https://support.huaweicloud.com/devg-dws/dws_04_0578.html).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。
  
 
