pg_depend
目录pg_depend
记录数据库对象之间的依赖关系。这些信息允许DROP
命令查找必须被DROP CASCADE
删除的其他对象,或者在DROP
RESTRICT
情况下阻止删除。
另请参阅pg_shdepend
,它对在一个数据库集簇中共享的对象之间的依赖提供了相似的功能。
表 51.18. pg_depend
的列
名称 | 类型 | 引用 | 描述 |
---|---|---|---|
classid | oid |
| 依赖对象所在的系统目录OID |
objid | oid | any OID column | 指定依赖对象的OID |
objsubid | int4 | 对于一个表列,这里是列号(objid 和classid 指表本身)。对于所有其他对象类型,此列为0。
| |
refclassid | oid |
| 被引用对象所在的系统目录的OID |
refobjid | oid | any OID column | 指定被引用对象的OID |
refobjsubid | int4 | 对于一个表列,这里是列号(refobjid 和refclassid 指表本身)。对于所有其他对象类型,此列为0。
| |
deptype | char | 定义此依赖关系语义的一个代码,见文本 |
在所有情况下,一个pg_depend
项表明被引用对象不能在没有删除其依赖对象的情况下被删除。但是,其中也有多种依赖类型,由deptype
标识:
DEPENDENCY_NORMAL
(n
) 在独立创建的对象之间的一个普通关系。依赖对象可以在不影响被依赖对象的情况下被删除。被引用对象只能通过指定CASCADE
被删除,在这种情况下依赖对象也会被删除。 例子:一个表列对于其数据类型有一个普通依赖。
DEPENDENCY_AUTO
(a
) 依赖对象可以被独立于被依赖对象删除,且应该在被引用对象被删除时自动被删除(不管在RESTRICT
或CASCADE
模式)。例子:一个表上的一个命名约束应该被设置为自动依赖于表,这样在表被删除后它也会消失。
DEPENDENCY_INTERNAL
(i
) 依赖对象作为被引用对象创建过程的一部分被创建,并且只是其内部实现的一部分。一个依赖对象的DROP
会被直接拒绝(作为替代,我们将告诉用户发出一个针对被引用对象的DROP
)。不管是否指定CASCADE
,一个被引用对象的DROP
将被传播来删除其依赖对象。例子:一个用于强制外键约束的触发器将被设置为内部依赖于其约束的pg_constraint
项。
DEPENDENCY_EXTENSION
(e
) 依赖对象是作为扩展的被引用对象的一个成员(参见pg_extension
)。依赖对象可以通过被引用对象上的DROP EXTENSION
来删除。在功能上,这种依赖类型和一个内部依赖的作用相同,其存在只是为了清晰和简化pg_dump。
DEPENDENCY_AUTO_EXTENSION
(x
)依赖对象不是作为被引用对象的扩展的成员(因此不应该被 pg_dump 忽略),但是没有被引用对象又无法工作,所以当扩展本身被删除时也应该把该依赖对象删除。该依赖对象也可以自己被删除。
DEPENDENCY_PIN
(p
) 没有依赖对象,这种类型的项是一个信号,用于说明系统本身依赖于被引用对象,并且该对象永远不能被删除。这种类型的项只能被initdb
创建。而此种项的依赖对象的列都为0。
在未来可能会需要其他依赖类型。