Gostaria de extrair algumas estatísticas básicas sobre como as tabelas são preenchidas em um determinado esquema do PostgreSQL 16, como o número absoluto e a porcentagem de valores nulos para cada coluna em todas as tabelas desse esquema.
Atualmente, estou buscando/computando esses valores usando Python/psycopg2, mas estou me perguntando se posso armazenar algum tipo de função dentro do próprio PostgreSQL que eu possa chamar sempre que quiser obter essas estatísticas.
Configuração de teste
Simples, ingênuo, repetitivo e lento
Basicamente, você deseja este tipo de saída para todas as colunas de qualquer tabela:
Inteligente, mas não dinâmico, ainda
Além de ser muito mais rápido, adiciona mais dados e protege contra a divisão por zero:
Sobre
WHERE NOT (t.*) IS NOT NULL
:Relacionado:
Automação total
O que você realmente deseja: uma função totalmente automatizada executando uma consulta dinâmica. Com sinos e assobios e desempenho otimizado. Também defende adequadamente contra possíveis injeções de SQL.
A função leva um ou dois argumentos:
_tbl regclass
... Nome da tabela como literal de string (opcionalmente qualificado pelo esquema) ou como tipo OIDregclass
_show_table_stats bool
... Mostrar estatísticas adicionais da tabela? Opcional, padrãofalse
.Exemplos de chamadas:
violino
Agora basta chamar esta função para cada tabela de interesse.
Você precisa conhecer o PL/pgSQL para lidar com isso corretamente.
Sobre o uso de
%s
para o nome da tabela comoregclass
digiteformat()
:Relacionado: