codecamp

PostgreSQL pg_shdepend

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

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

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

表 51.46. pg_shdepend Columns

列类型

描述

dbid oid (references pg_database.oid)

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

classid oid (references pg_class.oid)

依赖者对象所在的系统目录的OID

objid oid (参考任意OID列)

依赖者对象的OID

objsubid int4

对于一个表列,这将是列号(objidclassid指向表本身)。对于所有其他对象类型,该列值为0。

refclassid oid (references 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创建。这种项中关于依赖对象的列值都为0。

未来可能会需要其他的依赖类型。特别要注意的是在当前定义中只支持角色作为被引用对象。


PostgreSQL pg_sequence
PostgreSQL pg_shdescription
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

PostgreSQL SQL语言

PostgreSQL 服务器管理

PostgreSQL 客户端接口

PostgreSQL 服务器编程

PostgreSQL 参考

PostgreSQL 内部

PostgreSQL 附录

PostgreSQL 参考书目

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }