Se você conectar o pgadminIII a um servidor PostgreSQL 9.x, encontrará dois catálogos expostos na interface do usuário: ANSI (esquema de informações) e PostgreSQL (pg_catalog).
Estou procurando documentação que descreva o mapeamento entre
- objetos de banco de dados e as tabelas do sistema
- as tabelas do sistema e as visualizações information_schema
Por exemplo, eu gostaria de poder obter um nome de sequência de um banco de dados e saber rapidamente onde a própria sequência, o nome da sequência e a ACL da sequência (das instruções GRANT e REVOKE) seriam encontrados em ambos nas tabelas do sistema e nas exibições information_schema.
Isso está documentado em algum lugar? Examinei a documentação on-line do PostgreSQL e encontrei detalhes dos catálogos ANSI e PostgreSQL , mas não encontrei a documentação dos mapeamentos.
Atualizar
Parece que a informação provavelmente está no arquivo fonte information_schema.sql, mas esse arquivo não parece estar no código fonte online. (Veja, por exemplo, initdb.c em http://doxygen.postgresql.org/ .)
As tabelas do sistema são a implementação de objetos de banco de dados. Então, se você, digamos, chamar uma função
foo()
, o DBMSpg_proc
verifica se existe uma funçãofoo
e quais são os argumentos, o código-fonte e assim por diante. O layout e a disposição dos catálogos do sistema são meramente a forma como os implementadores de vários recursos ao longo do tempo os fizeram. Você já apontou a documentação dos catálogos. Em muitos casos, há um mapeamento simples, digamos, entre uma função epg_proc
. Mas em outros casos, como para um índice, é um pouco mais complicado. Você terá que extrair essas informações da documentação ou talvez dos muitos exemplos de consultas ao catálogo do sistema.O esquema de informações é especificado pelo padrão SQL. O princípio é que, se você inserir esses comandos DDL, uma consulta do esquema de informações deve fornecer esses resultados. Em muitos casos, há novamente um mapeamento simples entre objetos e exibições de esquema de informações, mas não é direto em todos os casos. Portanto, manter uma documentação separada do mapeamento dessas informações seria complicado e provavelmente inútil. O princípio é o DDL entrar, o esquema de informações sair, não o que acontece nos catálogos do sistema PostgreSQL.
Por fim, se você quiser saber se uma sequência seria encontrada em uma tabela de catálogo ou em uma exibição de esquema de informações, precisará consultar essas tabelas. A realidade é muito complicada para que isso seja mais simples. (Eu acho. Envie um patch se você tiver uma ideia melhor.)
Como a maior parte do esquema de informações está na forma de visualizações em pg_catalog, você pode obter uma grande parte dele usando
psql
: