51.48. pg_shdepend#

51.48. pg_shdepend

51.48. pg_shdepend

Каталог pg_shdepend записывает отношения зависимости между объектами базы данных и общими объектами, такими как роли. Эта информация позволяет Tantor SE гарантировать, что эти объекты не будут использоваться перед их удалением.

См. также pg_depend, который выполняет аналогичную функцию для зависимостей, связанных с объектами в пределах одной базы данных.

В отличие от большинства системных каталогов, pg_shdepend является общим для всех баз данных кластера: в кластере существует только одна копия pg_shdepend, а не по одной на каждую базу данных.

Таблица 51.48. pg_shdepend Колонки

Тип столбца

Описание

dbid oid (ссылается на pg_database.oid)

OID базы данных, в которой находится зависимый объект, или ноль для общего объекта

classid oid (ссылается на pg_class.oid)

OID системного каталога, в котором находится зависимый объект

objid oid (ссылается на любой столбец OID)

OID конкретного зависимого объекта

objsubid int4

Для столбца таблицы это номер столбца (поля objid и classid относятся к самой таблице). Для всех остальных типов объектов этот столбец равен нулю.

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_POLICY (r)

Упоминаемый объект (который должен быть ролью) упоминается как цель зависимого объекта политики.

SHARED_DEPENDENCY_TABLESPACE (t)

Упоминается ссылочный объект (который должен быть табличным пространством) в качестве табличного пространства для отношения, у которого нет хранилища.

В будущем могут потребоваться и другие варианты зависимостей. Особенно следует отметить, что текущее определение поддерживает только роли и таблицы в качестве ссылочных объектов.

Как и в каталоге pg_depend, большинство объектов, созданных во время initdb, считаются pinned. В pg_shdepend не делаются записи, которые имели бы закрепленный объект как ссылочный или зависимый объект.