52.51. pg_statistic #

O catálogo pg_statistic armazena dados estatísticos sobre o conteúdo do banco de dados. As entradas são criadas pelo ANALYZE, e posteriormente usadas pelo planejador de consultas. Note que todos os dados estatísticos são inerentemente aproximados, mesmo supondo que estejam atualizados.

Normalmente, há uma entrada, com stainherit = false, para cada coluna da tabela que foi analisada. Se a tabela tiver filhas de herança ou partições, também será criada uma segunda entrada com stainherit = true. Esta linha representa as estatísticas da coluna na árvore de herança, ou seja, estatísticas para os dados que se veria com SELECT coluna FROM tabela*, enquanto a linha stainherit = false representa os resultados de SELECT coluna FROM ONLY tabela.

pg_statistic também armazena dados estatísticos sobre os valores das expressões de índice. Elas são descritas como se fossem colunas de dados reais; em particular, starelid faz referência ao índice. Entretanto, nenhuma entrada é feita para uma coluna de índice não-expressão comum, porque seria redundante com a entrada para a coluna da tabela subjacente. No momento, as entradas para expressões de índice sempre têm stainherit = false.

Como podem ser apropriados diferentes tipos de estatísticas para diferentes tipos de dados, pg_statistic foi projetado para não assumir muito sobre que tipo de estatísticas armazena. Apenas estatísticas extremamente gerais (como nulidade) recebem colunas dedicadas em pg_statistic. Todo o resto é armazenado em encaixes (slots), que são grupos de colunas associadas cujo conteúdo é identificado por um número de código em uma das colunas do encaixe. Para obter mais informações veja o arquivo src/include/catalog/pg_statistic.h.

pg_statistic não deve ser poder ser lido por todos (public), porque até mesmo informações estatísticas sobre o conteúdo de uma tabela podem ser consideradas confidenciais. (Por exemplo: os valores mínimo e máximo de uma coluna de salário podem ser bastante interessantes.) pg_stats é uma visão publicamente legível de pg_statistic que mostra apenas informações sobre as tabelas legíveis pelo usuário corrente.

Tabela 52.51. Colunas de pg_statistic

Coluna Tipo de dados

Descrição

starelid oid (referencia pg_class.oid)

A tabela ou índice que a coluna descrita pertence

staattnum int2 (referencia pg_attribute.attnum)

O número da coluna descrita

stainherit bool

Se verdade, as estatísticas incluem valores de tabelas filhas, e não apenas os valores na relação especificada.

stanullfrac float4

A fração das entradas da coluna que são nulas

stawidth int4

A largura média armazenada, em bytes, das entradas não nulas

stadistinct float4

O número de valores de dados não nulos distintos na coluna. Um valor maior que zero é o número real de valores distintos. Um valor menor que zero é o negativo de um multiplicador para o número de linhas na tabela; por exemplo, uma coluna na qual cerca de 80% dos valores são não nulos, e cada valor não nulo aparece cerca de duas vezes em média, poderia ser representada por stadistinct = -0.4. Um valor zero significa que o número de valores distintos é desconhecido.

stakindN int2

Um número de código que indica o tipo de estatísticas armazenadas no N-ésimo encaixe da linha de pg_statistic.

staopN oid (referencia pg_operator.oid)

Operador usado para derivar as estatísticas armazenadas no N-ésimo encaixe. Por exemplo, um encaixe de histograma mostraria o operador <, que define a ordem de classificação dos dados. Zero se o tipo de estatística não exigir um operador.

stacollN oid (referencia pg_collation.oid)

A ordenação usada para derivar as estatísticas armazenadas no N-ésimo encaixe. Por exemplo, um encaixe de histograma para uma coluna ordenável mostraria a ordenação que define a ordem de classificação dos dados. Zero para dados não ordenáveis.

stanumbersN float4[]

Estatísticas numéricas do tipo apropriado para o N-ésimo encaixe, ou nulo se o tipo de encaixe não envolver valores numéricos

stavaluesN anyarray

Valores de dados de coluna do tipo apropriado para o N-ésimo encaixe, ou nulo se o tipo de encaixe não armazenar nenhum valor de dados. Os valores dos elementos de cada matriz são, na verdade, do tipo de dados da coluna específica ou de um tipo de dados relacionado, como o tipo de dados do elemento de uma matriz. Portanto, não há como definir o tipo de dados dessas colunas de forma mais específica do que anyarray.