51.50. pg_shdepend #
В каталоге pg_shdepend записываются отношения зависимости между объектами баз данных и разделяемыми объектами, такими как роли. Эта информация позволяет Postgres Pro удостовериться, что эти объекты не используется, прежде чем удалять их.
Также смотрите каталог pg_depend, который играет подобную роль в отношении зависимостей объектов в одной базе данных.
В отличие от большинства системных каталогов, pg_shdepend разделяется всеми базами данных кластера: есть только один экземпляр pg_shdepend в кластере, а не отдельные в каждой базе данных.
Таблица 51.50. Столбцы 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_INITACL(i)Вышестоящий объект (это должна быть роль) упоминается в записи
pg_init_privsзависимого объекта.SHARED_DEPENDENCY_POLICY(r)Вышестоящий объект (это должна быть роль) упомянут в качестве целевого в объекте зависимой политики.
SHARED_DEPENDENCY_TABLESPACE(t)Вышестоящий объект (это должно быть табличное пространство) упомянут в качестве табличного пространства для отношения, которое нигде не хранится.
В будущем могут появиться и другие подвиды зависимости. Заметьте в частности, что с текущим определением вышестоящими объектами могут быть только роли и табличные пространства.
Как и в каталоге pg_depend, большинство объектов, созданных во время работы initdb, считаются «закреплёнными». В pg_shdepend не добавляются никакие записи, в которых закреплённые объекты являлись бы зависимыми или зависящими.