O catálogo pg_statistic armazena dados estatísticos sobre o conteúdo do banco de dados. As entradas são criadas pelo comando ANALYZE e depois utilizadas pelo planejador de comandos. Existe uma entrada para cada coluna de tabela que foi analisada. Deve ser observado que todos os dados estatísticos são inerentemente aproximados, mesmo assumindo que estejam atualizados.
O catálogo pg_statistic também armazena dados estatísticos sobre os valores das expressões de índice, que são descritos como se fossem colunas de dados reais; particularmente, starelid referencia o índice. Entretanto, não é criada nenhuma entrada para uma coluna de índice comum que não é uma expressão, uma vez que seria redundante com a coluna da tabela subjacente.
Uma vez que podem ser apropriados tipos de estatística diferentes para tipos de dado diferentes, o catálogo pg_statistic foi projetado para não assumir muita coisa sobre que tipo de estatística será armazenado. Somente estatísticas extremamente gerais (como nulidade) recebem colunas dedicadas em pg_statistic. Tudo mais é armazenado em encaixes (slots), que são grupos de colunas associadas cujo conteúdo é identificado por um código numérico em uma das colunas do encaixe. Para obter informações adicionais deve ser consultado o arquivo src/include/catalog/pg_statistic.h.
O catálogo pg_statistic não deve poder ser visto por todos, uma vez que mesmo informações estatísticas sobre o conteúdo da tabela podem ser consideradas confidenciais (Exemplo: os valores mínimo e máximo da coluna salário podem ser bastante interessantes). pg_stats é uma visão de pg_statistic que pode ser lida por todos, e mostra apenas informações sobre as tabelas que podem ser lidas pelo usuário corrente.
Tabela 42-27. Colunas de pg_statistic
Nome | Tipo | Referencia | Descrição |
---|---|---|---|
starelid | oid | pg_class.oid | Tabela ou índice que a coluna descrita pertence |
staattnum | int2 | pg_attribute.attnum | Número da coluna descrita |
stanullfrac | float4 | Fração das entradas nulas na coluna | |
stawidth | int4 | Largura armazenada média, em bytes, das entradas não-nulas | |
stadistinct | float4 | Número de valores de dado não-nulos distintos na coluna. Um valor maior do que zero é o número real de valores distintos. Um valor menor do que zero é o negativo da fração do número de linhas da tabela (por exemplo, uma coluna em que cada valor aparece duas vezes, em média, pode ser representada por stadistinct = -0.5). O valor zero significa que o número de valores distintos é desconhecido. | |
stakindN | int2 | Código numérico indicando o tipo de estatística armazenada no N-ésimo "encaixe" da linha de pg_statistic. | |
staopN | oid | pg_operator.oid | Operador utilizado para derivar as estatísticas armazenadas no N-ésimo "encaixe". Por exemplo, em um encaixe tipo histograma é mostrado o operador < que define a ordem de classificação dos dados. |
stanumbersN | float4[] | Estatísticas numéricas do tipo apropriado para o N-ésimo "encaixe", ou nulo se o tipo do encaixe não envolve valores numéricos. | |
stavaluesN | anyarray | Valores dos dados da coluna, do tipo apropriado, para o N-ésimo "encaixe", ou nulo se o tipo do encaixe não armazena nenhum valor de dado. Cada valor do elemento da matriz é do tipo de dado específico da coluna, portanto não há como definir o tipo de dado desta coluna de forma mais específica que anyarray. |