51.47. pg_shdepend
В каталоге pg_shdepend
записываются отношения зависимости между объектами баз данных и разделяемыми объектами, такими как роли. Эта информация позволяет PostgreSQL удостовериться, что эти объекты не используется, прежде чем удалять их.
Также смотрите каталог pg_depend
, который играет подобную роль в отношении зависимостей объектов в одной базе данных.
В отличие от большинства системных каталогов, pg_shdepend
разделяется всеми базами данных кластера: есть только один экземпляр pg_shdepend
в кластере, а не отдельные в каждой базе данных.
Таблица 51.47. Столбцы pg_shdepend
Имя | Тип | Ссылки | Описание |
---|---|---|---|
dbid | oid |
| OID базы данных, в которой находится зависимый объект, или ноль, если это глобальный объект |
classid | oid |
| OID системного каталога, в котором находится зависимый объект |
objid | oid | любой столбец OID | OID определённого зависимого объекта |
objsubid | int4 | Для столбца таблицы это номер столбца (objid и classid указывают на саму таблицу). Для всех других типов объектов это поле содержит ноль. | |
refclassid | 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_PIN
(p
)Зависимый объект отсутствует; этот тип записи показывает, что система сама зависит от вышестоящего объекта, так что этот объект нельзя удалять ни при каких условиях. Записи этого типа создаются только командой
initdb
. Поля зависимого объекта в такой записи содержат нули.SHARED_DEPENDENCY_TABLESPACE
(t
)Вышестоящий объект (это должно быть табличное пространство) упомянут в качестве табличного пространства для отношения, которое нигде не хранится.
В будущем могут появиться и другие подвиды зависимости. Заметьте в частности, что с текущим определением вышестоящими объектами могут быть только роли и табличные пространства.