O catálogo pg_shdepend registra os relacionamentos de dependência entre objetos de banco de dados e objetos compartilhados, como funções de banco de dados (roles). Estas informações permitem que o PostgreSQL garanta que estes objetos não estejam referenciados antes de tentar excluí-los.
Veja também pg_depend, que executa uma função semelhante para dependências envolvendo objetos dentro de um único banco de dados.
Diferentemente da maioria dos catálogos do sistema, o catálogo pg_shdepend é compartilhado entre todos os bancos de dados da instância: há apenas uma cópia de pg_shdepend por instância, e não uma por banco de dados.
Tabela 52.48. Colunas de pg_shdepend
Coluna Tipo de dados Descrição |
|---|
OID do banco de dados em que o objeto dependente se encontra, ou zero para um objeto compartilhado |
OID do catálogo do sistema em que o objeto dependente se encontra |
OID do objeto dependente específico |
Para uma coluna de tabela, este é o número da coluna
( |
OID do catálogo do sistema em que o objeto referenciado se encontra (deve ser um catálogo compartilhado) |
OID do objeto referenciado específico |
Código que define a semântica específica dessa relação de dependência; veja o texto |
Em todos os casos, uma entrada em
pg_shdepend
indica que o objeto referenciado não pode ser excluído sem também
excluir o objeto dependente.
No entanto, existem várias modalidades identificadas por
deptype:
SHARED_DEPENDENCY_OWNER (o)O objeto referenciado (que deve ser uma função de banco de dados) é o dono do objeto dependente.
SHARED_DEPENDENCY_ACL (a)
O objeto referenciado (que deve ser uma função de banco de dados)
é mencionado na ACL (lista de controle de
acesso) do objeto dependente.
(Não é colocada uma entrada SHARED_DEPENDENCY_ACL
para o dono do objeto, porque o dono terá uma entrada
SHARED_DEPENDENCY_OWNER de qualquer maneira.)
SHARED_DEPENDENCY_INITACL (i)O objeto referenciado (que deve ser uma função de banco de dados) é mencionado em uma entrada em pg_init_privs para o objeto dependente.
SHARED_DEPENDENCY_POLICY (r)O objeto referenciado (que deve ser uma função de banco de dados) é mencionado como o destino de um objeto de política dependente.
SHARED_DEPENDENCY_TABLESPACE (t)O objeto referenciado (que deve ser um espaço de tabelas) é mencionado como o espaço de tabelas para uma relação que não tem armazenamento.
Poderão ser necessários outros tipos de dependência no futuro. Note-se em particular que a definição corrente só oferece suporte a funções de banco de dados e espaços de tabelas como objetos referenciados.
Assim como no catálogo pg_depend, a maioria dos objetos criados durante o initdb são considerados fixados (pinned). Não são criadas entradas em pg_shdepend que tenham um objeto fixado (pinned) como objeto referenciado ou dependente.