52.48. pg_shdepend #

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

dbid oid (referencia pg_database.oid)

OID do banco de dados em que o objeto dependente se encontra, ou zero para um objeto compartilhado

classid oid (referencia pg_class.oid)

OID do catálogo do sistema em que o objeto dependente se encontra

objid oid (referencia qualquer coluna OID)

OID do objeto dependente específico

objsubid int4

Para uma coluna de tabela, este é o número da coluna (objid e classid fazem referência à própria tabela). Para todos os outros tipos de objeto, o valor dessa coluna é zero.

refclassid oid (referencia pg_class.oid)

OID do catálogo do sistema em que o objeto referenciado se encontra (deve ser um catálogo compartilhado)

refobjid oid (referencia qualquer coluna OID)

OID do objeto referenciado específico

deptype char

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.