PostgreSQL 9.0.4 中文文档 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 45. 系统表 | Fast Forward | Next |
pg_depend表记录数据库对象之间的依赖关系。这个信息允许DROP commands命令找出 哪些其它对象必须由DROP CASCADE删除,或者是在DROP RESTRICT的情况下避免删除。
这个表的功能类似pg_shdepend,用于记录那些在数据库集群之间共享的对象之间的依赖性关系。
Table 45-17. pg_depend Columns
名称 | 类型 | 引用 | 描述 |
---|---|---|---|
classid | oid | pg_class.oid | 有依赖对象所在系统表的OID |
objid | oid | any OID column | 指定的有依赖对象的 OID |
objsubid | int4 | 对于表字段,这个是该属性的字段数(objid and classid 引用表本身)。对于所有其它对象类型,目前这个字段是零。 | |
refclassid | oid | pg_class.oid | 引用对象所在的系统表的OID |
refobjid | oid | any OID column | 指定的引用对象的OID |
refobjsubid | int4 | 对于表字段,这个是该字段的字段号( refobjid和refclassid引用表本身)。 对于所有其它对象类型,目前这个字段是零。 | |
deptype | char | 一个定义这个依赖关系特定语义的代码。见下文。 |
在所有情况下,一个pg_depend记录表示不能删除引用的对象在有依赖的对象前。 不过,这里还有几种由deptype定义的情况:
独立创建的对象之间的一般关系。可以在不影响引用对象的情况下,删除有依赖的对象。 只有在指定了CASCADE的情况下删除引用对象,这时也删除了有依赖的对象。 例如:一个表字段对其数据类型有一般依赖关系。
可以从引用对象删除以来对象,并且如果删除了被引用对象则应该被 自动删除(不管是RESTRICT或CASCADE模式)。例如:一个表上面的命名约束是在该表上的自 动依赖关系,因此如果删除了表,它也会被删除。
有依赖的对象是作为创建引用对象的一部分,实际上只是它的内部实现的一部分。 DROP有依赖对象是不能直接允许的(将告诉用户发出一条删除引用对象的DROP) 。一个对引用对象的DROP 将传播到有依赖对象,不管是否指定了CASCADE。 例如:一个创建来强制外键约束的触发器在该约束的pg_constraint记录上是标记为内部依赖的。
没有依赖对象;这种类型的记录标志着系统本身依赖于引用对象,因此这个对象决不能被删除。 这种类型的记录只有在initdb的时候创建。有依赖对象的字段里是零。
将来可能还会有其它依赖的风格。