50.48. pg_shdepend#
50.48. pg_shdepend #
Каталог pg_shdepend записывает отношения зависимости между объектами базы данных и общими объектами, такими как роли. Эта информация позволяет Tantor BE гарантировать, что эти объекты не будут использоваться перед их удалением.
См. также pg_depend,
который выполняет аналогичную функцию для зависимостей, связанных с объектами
в пределах одной базы данных.
В отличие от большинства системных каталогов, pg_shdepend является общим для всех баз данных кластера: в кластере существует только одна копия pg_shdepend, а не по одной на каждую базу данных.
Таблица 50.48. pg_shdepend Колонки
Тип столбца Описание |
|---|
OID базы данных, в которой находится зависимый объект, или ноль для общего объекта |
OID системного каталога, в котором находится зависимый объект |
OID конкретного зависимого объекта |
Для столбца таблицы это номер столбца (поля |
OID системного каталога, в котором находится целевой объект (должен быть общим каталогом) |
OID указанного объекта |
Код, определяющий конкретную семантику этой зависимостной связи; см. текст |
Во всех случаях запись 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 не делаются записи, которые имели бы закрепленный объект как целевой или зависимый объект.