43.31. pg_statistic

Le catalogue pg_statistic stocke des données statistiques sur le contenu de la base de données. Les entrées sont créées par ANALYZE, puis utilisées par le planificateur de requêtes. Il y a une entrée pour chaque colonne de table qui a été analysée. Les données statistiques sont, par définition des approximations, même si elles sont à jour.

pg_statistic stocke aussi les données statistiques des valeurs des expressions d'index. Elles sont décrites comme si elles étaient de vraies colonnes ; en particulier, starelid référence l'index. Néanmoins, aucune entrée n'est effectuée pour une colonne d'index ordinaire sans expression car cela est redondant avec l'entrée correspondant à la colonne sous-jacente de la table.

Comme des statistiques différentes peuvent être appropriées pour des types de données différents, pg_statistic ne fait qu'un minimum de suppositions sur les types de statistiques qu'il stocke. Seules des statistiques extrêmement générales (comme les valeurs NULL) ont des colonnes dédiées. Tout le reste est stocké dans des « connecteurs », groupes de colonnes associées dont le contenu est identifié par un numéro de code dans l'une des colonnes du connecteur. Pour plus d'information, voir src/include/catalog/pg_statistic.h.

pg_statistic ne doit pas être lisible par le public, car même les données statistiques sont sensibles. (Exemple : les valeurs maximales et minimales d'une colonne de salaire peuvent être intéressantes). pg_stats est une vue sur pg_statistic accessible à tous, qui n'expose que les informations sur les tables accessibles à l'utilisateur courant.

Tableau 43.31. Colonnes de pg_statistic

Nom Type Références Description
starelid oid pg_class.oid Table ou index à qui la colonne décrite appartient
staattnum int2 pg_attribute.attnum Numéro de la colonne décrite
stanullfrac float4   Fraction des entrées de la colonne qui ont une valeur NULL
stawidth int4   Taille moyenne, en octets, des entrées non NULL
stadistinct float4   Nombre de valeurs distinctes non NULL dans la colonne. Une valeurs positive est le nombre réel de valeurs distinctes. Une valeur négative est le négatif d'une fraction du nombre de lignes dans la table (par exemple, une colonne dans laquelle les valeurs apparaissent environ deux fois en moyenne peut être représentée par stadistinct = -0.5). 0 indique que le nombre de valeurs distinctes est inconnu.
stakindN int2   Numéro de code indiquant le type de statistiques stockées dans « le connecteur » numéro N de la ligne de pg_statistic.
staopN oid pg_operator.oid Opérateur utilisé pour dériver les statistiques stockées dans « le connecteur » numéro N. Par exemple, un connecteur d'histogramme montre l'opérateur <, qui définit l'ordre de tri des données.
stanumbersN float4[]   Statistiques numériques du type approprié pour « le connecteur » numéro N ou NULL si le type de connecteur n'implique pas de valeurs numériques.
stavaluesN anyarray   Valeurs de données de la colonne du type approprié pour « le connecteur » numéro N ou NULL si le type de connecteur ne stocke aucune valeur de données. Chaque valeur d'élément du tableau est en fait du type de données de la colonne indiquée, si bien qu'il n'y a aucun moyen de définir le type de ces colonnes plus précisément qu'avec le type anyarray (tableau quelconque).