pg_shdepend#

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

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

В отличие от большинства системных каталогов, pg_shdepend является общим для всех баз данных кластера: существует только одна копия 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, считаются «прикрепленными». В pg_shdepend не делается никаких записей, в которых бы присутствовал объект pinned как ссылающийся или зависимый объект.