41.27. 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 l'optimiseur de requêtes. Il y a une entrée pour chaque colonne de table qui a été analysée. Notez que les données statistiques sont par définition des approximations, même si elles sont à jour.

pg_statistic stocke aussi les données statistiques sur les 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 serait redondant avec l'entrée pour la colonne sous-jacente de la table.

Comme des statistiques différentes seront appropriées pour des types de données différents, pg_statistic est prévu pour ne faire 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 << emplacements >>, qui sont des groupes de colonnes associées dont le contenu est identifié par un numéro de code dans l'une des colonnes de l'emplacement. 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 peuvent être considérées comme sensibles. (Exemple : les valeurs maximales et minimales d'une colonne de salaire peuvent être assez intéressantes). pg_stats est une vue sur pg_statistic accessible à tous, qui n'expose que les informations sur ces tables qui sont accessibles à l'utilisateur courant.

Tableau 41-27. Colonnes de pg_statistic

NomTypeRéférencesDescription
starelidoidpg_class .oidTable ou index à laquelle la colonne décrite appartient.
staattnumint2pg_attribute .attnumNuméro de la colonne décrite.
stanullfracfloat4 Fraction des entrées de la colonne qui ont une valeur NULL.
stawidthint4 Taille moyenne stockée des entrées non NULL.
stadistinctfloat4  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 pourrait être représentée par stadistinct = -0.5). Une valeur à zéro indique que le nombre de valeurs distinctes est inconnu.
stakindNint2  Numéro de code indiquant quel type de statistiques est stocké dans << l'emplacement >> numéro N de la ligne de pg_statistic.
staopNoidpg_operator .oid Opérateur utilisé pour dériver les statistiques stockées dans << l'emplacement >> numéro N. Par exemple, un emplacement d'histogramme montrerait l'opérateur <, qui définit l'ordre de tri des données.
stanumbersNfloat4[]  Statistiques numériques du genre approprié pour << l'emplacement >> numéro N ou NULL si le type d'emplacement ne nécessite pas de valeurs numériques.
stavaluesNanyarray  Valeurs de données de la colonne du type approprié pour << l'emplacement >> numéro N ou NULL si le type d'emplacement 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 spécifiée, si bien qu'il n'y a aucun moyen de définir ces colonnes autrement qu'avec le type anyarray (tableau quelconque).