pg_depend
Системная таблица pg_depend содержит отношения зависимости между объектами базы данных.
Эта информация позволяет командам DROP определять, какие другие объекты должны быть удалены при DROP CASCADE, либо предотвращать удаление в случае DROP RESTRICT.
См. также pg_shdepend, которая выполняет схожую функцию для зависимостей, связанных с объектами, общими для всей системы Greengage DB.
Во всех случаях запись pg_depend означает, что вышестоящий объект нельзя удалить без одновременного удаления зависимого объекта.
Однако есть несколько подвидов зависимости, определяемых deptype:
-
DEPENDENCY_NORMAL (n) — обычная зависимость между отдельно созданными объектами. Зависимый объект можно удалить, не затрагивая вышестоящий объект. Вышестоящий объект можно удалить только с указанием
CASCADE, и тогда зависимый объект тоже будет удален. Пример: столбец таблицы имеет обычную зависимость от своего типа данных. -
DEPENDENCY_AUTO (a) — зависимый объект можно удалить отдельно от вышестоящего объекта, и он должен автоматически удаляться (вне зависимости от режима
RESTRICTилиCASCADE), если удаляется вышестоящий объект. Пример: именованное ограничение для таблицы находится в автоматической зависимости от таблицы, так что оно исчезнет при удалении таблицы. -
DEPENDENCY_INTERNAL (i) — зависимый объект создается при создании вышестоящего объекта и фактически является частью его внутренней реализации. Команда
DROPдля зависимого объекта будет полностью запрещена (система предложит пользователю вместо этого выполнитьDROPдля вышестоящего объекта). КомандаDROPдля вышестоящего объекта приведет к удалению зависимого объекта вне зависимости от того, указанCASCADEили нет. -
DEPENDENCY_PIN (p) — зависимого объекта нет; запись этого типа означает, что сама система зависит от вышестоящего объекта, и поэтому этот объект нельзя удалять никогда. Записи этого типа создаются только при инициализации системы. Столбцы для зависимого объекта содержат нули.
| Столбец | Тип | Ссылки | Описание |
|---|---|---|---|
classid |
oid |
pg_class.oid |
OID каталога, в котором находится зависимый объект |
objid |
oid |
любой столбец типа OID |
OID конкретного зависимого объекта |
objsubid |
integer |
— |
Для столбца таблицы это номер столбца.
Для всех остальных типов объектов этот столбец равен |
refclassid |
oid |
pg_class.oid |
OID системного каталога, в котором находится вышестоящий объект |
refobjid |
oid |
любой столбец типа OID |
OID конкретного объекта, на который есть ссылка |
refobjsubid |
integer |
— |
Для столбца таблицы это номер столбца, на который есть ссылка.
Для всех остальных типов объектов этот столбец равен |
deptype |
char |
— |
Код, определяющий конкретную семантику этой зависимости |