pg_depend
pg_depend¶
pg_depend
系统目录表记录数据库对象之间依赖关系。 此信息允许DROP
命令查找哪些其他对象必须由DROP CASCADE
删除或者必须防止在DROP RESTRICT
情况中被删除。
另请参见pg_shdepend,它对涉及SeaboxMPP系统共享对象的依赖执行类似的功能。
在所有的情况下,pg_depend
项表示在不删除依赖对象的前提下也不能删除被引用对象。 不过,有几种由deptype
区分的子类型:
DEPENDENCY_NORMAL (n)
-
单独创建的对象之间的正常关系。 可以删除依赖对象而不影响被引用的对象。被引用对象只能通过指定
CASCADE
来删除,在这种情况下依赖对象也会被删除。例如:表列对其数据类型具有正常的依赖性。
DEPENDENCY_AUTO (a)
-
依赖对象可以独立于被引用对象而删除,并且如果被引用对象被删除,则依赖对象应该自动被删除(不管是
RESTRICT
还是CASCADE
模式)。例如:表上的命名约束自动依赖表,因此如果表被删除,该约束也将消失。
DEPENDENCY_INTERNAL (i)
- 依赖对象作为被引用对象的一部分创建,实际只是其内部实现的一部分。
依赖对象的
DROP
操作将被完全禁止(我们会告诉用户针对被引用对象发出DROP
命令来代替)。 被引用对象的DROP
命令会被传播以删除依赖对象,不管是否指定CASCADE
(级联删除)。 DEPENDENCY_PIN (p)
- 没有依赖对象;这种类型的条目是系统本身依赖于引用对象的信号,因此绝不能删除该对象。 此类型的条目仅由系统初始化创建。从属对象的列包含零。
列 | 类型 | 参考 | 描述 |
---|---|---|---|
classid |
oid | pg_class.oid | 依赖对象所在的系统目录的OID。 |
objid |
oid | any OID column | 特定依赖对象的OID。 |
objsubid |
int4 | 对于表列,这是列编号。 对于其他对象类型,此列为0。 | |
refclassid |
oid | pg_class.oid | 被引用对象所在的系统目录的OID。 |
refobjid |
oid | any OID column | 特定被引用对象的OID。 |
refobjsubid |
int4 | 对于表列,这是被引用的列编号。 对于其他对象类型,该列为0。 | |
deptype |
char | 定义此依赖关系的特定语义的代码。 | |
Table 1. pg_catalog.pg_depend |