Перейти к основному содержимому

pg_shdepend

примечание

Эта страница переведена при помощи нейросети GigaChat.

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

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

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

Столбцы pg_shdepend:

СтолбецТип данныхОписание
dbidoid (ссылается на pg_database.oid)OID базы данных, в которой находится зависимый объект, или ноль для общего объекта
classidoid (ссылается на pg_class.oid)OID системного каталога, в котором находится зависимый объект
objidoid (ссылается на на любой столбец OID)OID конкретного зависимого объекта
objsubidint4Для столбца таблицы это номер столбца (objid и classid относятся к самой таблице). Для всех остальных типов объектов этот столбец равен нулю
refclassidoid (ссылается на pg_class.oid)OID системного каталога, в котором находится объект (должен быть общим каталогом)
refobjidoid (ссылается на на любой столбец OID)OID конкретного объекта, на который ссылается
deptypecharКод, определяющий конкретную семантику этого отношения зависимости, подробнее смотрите текст

Во всех случаях запись 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 как ссылающийся или зависимый объект.