PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 48. 系统表 | 下一页

# 48.18. `pg_depend`

`pg_depend`表记录数据库对象之间的依赖关系。 这个信息允许`DROP`命令找出哪些其它对象必须由`DROP CASCADE`删除， 或者是在`DROP RESTRICT`的情况下避免删除。

这个表的功能类似`pg_shdepend`， 用于记录那些在数据库集群之间共享的对象之间的依赖性关系。

表 48-18. `pg_depend` 字段

名字 | 类型 | 引用 | 描述
--- | --- | --- | ---
`classid` | `oid` | ``pg_class`.oid` | 有依赖对象所在系统表的 OID
`objid` | `oid` | 任意 OID 属性 | 指定的依赖对象的 OID
`objsubid` | `int4` |  | 对于表字段，这个是该属性的字段数(`objid`和`classid` 引用表本身)。对于所有其它对象类型，目前这个字段是零。
`refclassid` | `oid` | ``pg_class`.oid` | 被引用对象所在的系统表的 OID
`refobjid` | `oid` | 任意 OID 属性 | 指定的被引用对象的 OID
`refobjsubid` | `int4` |  | 对于表字段，这个是该字段的字段号(`refobjid`和`refclassid` 引用表本身)。对于所有其它对象类型，目前这个字段是零。
`deptype` | `char` |  | 一个定义这个依赖关系特定语义的代码。见下文。

在所有情况下，一个`pg_depend`记录表示被引用的对象不能在有依赖的对象被删除前删除。 不过，这里还有几种由`deptype`定义的情况：

`DEPENDENCY_NORMAL` (`n`)

  独立创建的对象之间的一般关系。有倚赖的对象可以在不影响被引用对象的情况下删除。 被引用对象只有在声明了`CASCADE`的情况下删除，这时有依赖的对象也被删除。 例子：一个表字段对其数据类型有一般依赖关系。

`DEPENDENCY_AUTO` (`a`)

  有依赖对象可以和被引用对象分别删除，并且如果删除了被引用对象则应该被自动删除 (不管是`RESTRICT`或`CASCADE`模式)。例子： 一个表上面的命名约束是在该表上的自动依赖关系，因此如果删除了表，它也会被删除。

`DEPENDENCY_INTERNAL` (`i`)

  有依赖的对象是作为被引用对象的一部分创建的，实际上只是它的内部实现的一部分。 `DROP`有依赖对象是不能直接允许的(将告诉用户发出一条删除被引用对象的`DROP`)。 一个对被引用对象的`DROP`将传播到有依赖对象，不管是否声明了`CASCADE`。 例子：一个创建来强制外键约束的触发器在该约束的`pg_constraint`记录上是标记为内部依赖的。

`DEPENDENCY_EXTENSION` (`e`)

  依赖对象是被依赖对象extension的一个成员（参阅 `pg_extension`）。 依赖对象只可以通过在被依赖对象上`DROP EXTENSION`删除。 函数上这个依赖类型和内部依赖一样动作，但是它为了清晰和简化pg_dump保持分开。

`DEPENDENCY_PIN` (`p`)

  没有有依赖对象；这种类型的记录标志着系统本身依赖于被引用对象，因此这个对象决不能被删除。 这种类型的记录只有在`initdb`的时候创建。有依赖对象的字段里是零。

将来可能还会有其它依赖的风格。

上一页 | 起始页 | 下一页
`pg_default_acl` | 上一级 | `pg_description`