选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.0 已于 2015 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

45.17. pg_depend #

目录pg_depend记录数据库对象之间的依赖关系。这些信息允许DROP命令查找必须被DROP CASCADE删除的其他对象,或者在DROP RESTRICT情况下阻止删除。

另请参阅pg_shdepend,它对在一个数据库集簇中共享的对象之间的依赖提供了相似的功能。

表 45.17. pg_depend Columns

名称 类型 引用 描述
classid oid pg_class.oid 依赖对象所在系统目录的OID
objid oid 任意 OID 列 特定依赖对象的OID
objsubid int4   对于一个表列,这里是列号(objidclassid指表本身)。对于所有其他对象类型,此列为0。
refclassid oid pg_class.oid 被引用对象所在的系统目录的OID
refobjid oid 任意 OID 列 指定被引用对象的OID
refobjsubid int4   对于一个表列,这里是列号(refobjidrefclassid指表本身)。对于所有其他对象类型,此列为0。
deptype char   定义此依赖关系语义的一个代码,见文本

在所有情况下,一条pg_depend记录都表示:如果不同时删除依赖对象,就不能删除被引用对象。不过,还存在若干由deptype标识的子类型:

DEPENDENCY_NORMAL (n)

两个独立创建的对象之间的正常关系。依赖对象可以被删除而不影响被引用对象。被引用对象只能通过指定CASCADE来删除,这样依赖对象也会被删除。例如:表列对其数据类型有一个正常依赖关系。

DEPENDENCY_AUTO (a)

依赖对象可以与被引用对象分开删除,并且在被引用对象删除时应自动删除(无论使用RESTRICT还是CASCADE模式)。例如,表上的命名约束会自动依赖于该表,因此删除表时该约束也会消失。

DEPENDENCY_INTERNAL (i)

依赖对象作为被引用对象创建过程的一部分而创建,实际上只是其内部实现的一部分。对依赖对象执行DROP会被直接禁止(我们会告诉用户改为对被引用对象执行DROP)。对被引用对象执行DROP会传播到依赖对象,使其被删除,无论是否指定CASCADE。例如,为实施外键约束而创建的触发器会在内部依赖于该约束的pg_constraint项。

DEPENDENCY_PIN (p)

不存在依赖对象;这种类型的项表示系统本身依赖于被引用对象,因此该对象绝不能删除。这种类型的项只由initdb创建。用于表示依赖对象的各列包含零。

未来可能需要其他依赖关系的变种。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。