Catálogos do Sistema
O PostgreSQL armazena seu próprio schema em catálogos do sistema (pg_catalog). As views do padrão SQL information_schema encapsulam um subconjunto para portabilidade. Operadores e automação devem conhecer ambos: os catálogos são completos; information_schema é familiar.
Receita
-- Tabelas no banco de dados atual (estilo de catálogo)
SELECT n.nspname, c.relname, pg_total_relation_size(c.oid) AS bytes
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','p','m')
AND n.nspname NOT IN ('pg_catalog','information_schema')
ORDER BY bytes DESC
LIMIT 20;Quando usar isso: Você precisa inspecionar schemas, colunas, constraints ou tamanhos sem ferramentas externas.
Exemplo de Trabalho
-- Detalhe da coluna com tipos e nulidade
SELECT table_schema, table_name, column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_schema = 'app' AND table_name = 'customers'
ORDER BY ordinal_position;
-- Constraints em uma tabela
SELECT conname, contype, pg_get_constraintdef(oid) AS definition
FROM pg_constraint
WHERE conrelid = 'app.customers'::regclass;O que isso demonstra:
information_schema.columnslista metadados de colunas visíveis ao usuário.pg_constraintarmazena definições de CHECK, UNIQUE, PRIMARY KEY e FOREIGN KEY.pg_total_relation_sizeinclui índices e TOAST para planejamento de capacidade.
Mergulho Profundo
Catálogos Principais
| Catálogo | Contém |
|---|---|
| pg_namespace | schemas |
| pg_class | tabelas, índices, views (relkind) |
| pg_attribute | colunas |
| pg_constraint | constraints |
| pg_index | colunas e flags de índice |
| pg_proc | funções e procedimentos |
information_schema vs pg_catalog
information_schemafiltra para objetos padrão SQL e oculta detalhes de implementação.pg_catalogé a fonte autoritativa para partições, políticas, triggers e parâmetros de armazenamento.- Junte catálogos quando precisar de OIDs,
relfilenodeouamname(método de acesso).
Dicas de Descoberta
- Casts
regclass('app.customers'::regclass) resolvem nomes usandosearch_path. psql \d+ nome_tabelaé um wrapper simples sobre consultas de catálogo.
Armadilhas
- OID wraps em clusters de longa duração - Clusters muito antigos raramente atingem isso; ainda assim, use nomes no código do aplicativo. Correção: Prefira casts
regclass/regtypeem scripts de administração. information_schemaomite detalhes de partições - Filhos de partição declarativa podem parecer tabelas comuns. Correção: Consultepg_inheritsepg_partitioned_table.- Lacunas em
pg_attribute.attnum- Colunas descartadas deixam buracos; filtreattnum > 0e não descartadas. Correção: Useinformation_schemapara listas de colunas portáteis. - Views de estatísticas não são catálogos -
pg_stat_*são views sobre snapshots de memória compartilhada. Correção: Reinicie estatísticas compg_stat_reset()com cautela em produção. search_pathafetaregclass- O mesmo nome não qualificado pode ser resolvido de forma diferente por role. Correção: Qualifique o schema em ferramentas e migrações.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
Família psql \d | Exploração interativa | Automação ou diff de schema em CI |
pg_dump --schema-only | Exportação completa de DDL | Busca leve de colunas |
| Migrações ORM | Evolução de schema de propriedade do aplicativo | Governança ampla de DBA entre serviços |
FAQs
Posso consultar catálogos de qualquer banco de dados?
Sim. Os catálogos descrevem o cluster; a maioria das consultas filtra para objetos de current_database().
As alterações de catálogo são transacionais?
DDL que altera tabelas de usuário atualiza catálogos na mesma transação.
O que é `pg_description`?
Armazenamento opcional de comentários vinculado a OIDs de catálogo via objoid/classoid.
Como encontro chaves estrangeiras?
pg_constraint com contype = 'f' ou information_schema.table_constraints.
O `information_schema` é mais lento?
Camadas de view ligeiramente mais. Para introspecção pesada, junções pg_catalog são boas.
Relacionados
- Noções Básicas de PostgreSQL - primeiras consultas de catálogo
- Noções Básicas de Design de Schema - nomenclatura e chaves
- Transações DDL - atualizações de catálogo durante migrações
Versões da Pilha: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.