↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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 / 8.4 / 8.3 / 8.2 / 8.1
测试版PostgreSQL 19 RC 1 尚未正式发布,内容与行为在正式发布前可能变化。正式内容请看当前版本。

52.48. pg_shdepend #

目录 pg_shdepend 记录数据库对象与共享对象(例如角色)之间的依赖关系。这些信息使得 PostgreSQL 可以确保对象在尝试删除前未被其他对象引用。

另请参阅 pg_depend,它对单个数据库中对象之间的依赖提供了相似的功能。

与大部分其他系统目录不同,pg_shdepend 在整个集簇的所有数据库之间共享:在每一个集簇中只有一个 pg_shdepend 的拷贝,而不是每个数据库一份。

表 52.48. pg_shdepend 列

列类型

描述

dbid oid(引用 pg_database.oid)

依赖对象所在数据库的 OID,对于共享对象为零

classid oid(引用 pg_class.oid)

依赖对象所在系统目录的 OID

objid oid(引用任何 OID 列)

特定依赖对象的 OID

objsubid int4

对于一个表列,这里是列号(objid 和 classid 指表本身)。对于所有其他对象类型,此列为 0。

refclassid oid(引用 pg_class.oid)

被引用对象所在的系统目录的 OID(必须是一个共享的目录)

refobjid oid(引用任何 OID 列)

指定被引用对象的 OID

deptype char

定义此依赖关系语义的一个代码,见下文


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

SHARED_DEPENDENCY_OWNER (o) #

被引用对象(必须是一个角色)是依赖对象的拥有者。

SHARED_DEPENDENCY_ACL (a) #

被引用对象(必须是角色)出现在依赖对象的 ACL 中。(不会为对象拥有者创建 SHARED_DEPENDENCY_ACL 项,因为对象拥有者无论如何都会有一个 SHARED_DEPENDENCY_OWNER 项。)

SHARED_DEPENDENCY_INITACL (i) #

被引用对象(必须是角色)在依赖对象的 pg_init_privs 条目中被提及。

SHARED_DEPENDENCY_POLICY (r) #

被引用对象(必须是一个角色)被提及为依赖策略对象的目标。

SHARED_DEPENDENCY_TABLESPACE (t) #

被引用对象(必须是一个表空间)被提及为某个不具有存储的关系所使用的表空间。

将来可能还需要其他依赖类型。特别要注意的是,当前定义只支持把角色和表空间作为被引用对象。

与 pg_depend 目录中一样,在 initdb 期间创建的大多数对象被视为“固定(pinned)”。不会在 pg_shdepend 中创建以固定对象作为被引用对象或依赖对象的条目。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游会在正式发布前持续修订。