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