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

pg_shdepend

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

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

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