pg_shdepend #目录pg_shdepend记录数据库对象和共享对象之间的依赖关系,例如角色。这些信息使得PostgreSQL可以确保对象在被删除时没有被其他对象引用。
另请参阅pg_depend,它对单个数据库中对象之间的依赖提供了相似的功能。
与大部分其他系统目录不同,pg_shdepend在整个集簇的所有数据库之间共享:在每一个集簇中只有一个pg_shdepend的拷贝,而不是每个数据库一份。
Table 51.48. pg_shdepend 列
|
列类型 描述 |
|---|
|
依赖对象所在数据库的OID,对于共享对象为零 |
|
依赖对象所在系统目录的OID |
|
特定依赖对象的OID |
|
对于一个表列,这将是列号( |
|
被引用对象所在的系统目录的OID(必须是一个共享的目录) |
|
指定被引用对象的OID |
|
定义此依赖关系语义的一个代码,见文本 |
在所有情况下,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) #被引用对象(必须是一个角色)被提及为依赖策略对象的目标。
SHARED_DEPENDENCY_TABLESPACE (t) #被引用对象(必须是一个表空间)被提及为某个不具有存储的关系所使用的表空间。
将来可能还需要其他依赖类型。特别要注意的是,当前定义只支持把角色和表空间作为被引用对象。
与pg_depend目录中一样,在initdb期间创建的大多数对象被视为“固定(pinned)”。 在pg_shdepend中不会有任何条目,这些条目将使一个被固定(pinned)的对象成为被引用或依赖的对象。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。