pg_statistic#

В каталоге pg_statistic хранятся статистические данные о содержимом базы данных. Записи создаются ANALYZE и впоследствии используются планировщиком запросов. Обратите внимание, что все статистические данные по своей сути являются приблизительными, даже если предположить, что они актуальны.

Обычно для каждого столбца таблицы, подвергшегося анализу, создается одна запись с stainherit = false. Если таблица имеет дочерние элементы наследования или разделы, создается вторая запись с stainherit = true. Эта строка представляет статистику столбца по дереву наследования, т. е. статистику данных, которые можно увидеть при использовании SELECT *column* FROM table\*, в то время как строка stainherit = false представляет результаты SELECT *column* FROM ONLY *table*.

pg_statistic также хранит статистические данные о значениях индексных выражений. Они описываются так, как если бы это были реальные столбцы данных; в частности, starelid ссылается на индекс. Однако для обычного индексного столбца, не являющегося выражением, запись не делается, поскольку она была бы избыточной по отношению к записи для столбца таблицы, лежащего в основе. В настоящее время записи для индексных выражений всегда имеют stainherit = false.

Поскольку разные виды статистики могут быть уместны для разных типов данных, pg_statistic спроектирован так, чтобы не предполагать многого о том, какого рода статистику он хранит. В pg_statistic выделены столбцы только для очень общих статистик (таких как nullness). Все остальное хранится в “слотах”, которые представляют собой группы связанных столбцов, содержимое идентифицируется кодовым номером в одном из столбцов слота. Более подробную информацию можно найти в src/include/catalog/pg_statistic.h.

pg_statistic не должна быть доступна для публичного чтения, поскольку даже статистическая информация о содержимом таблицы может считаться конфиденциальной. (Пример: минимальные и максимальные значения столбца зарплаты могут быть весьма интересными.) pg_stats — это общедоступное представление на pg_statistic, которое раскрывает информацию только о для чтения таблицах текущему пользователю.

Столбец

Тип данных

Описание

starelid

oid (ссылается на pg_class.oid)

Таблица или индекс, к которому принадлежит описанный столбец

staattnum

int2 (ссылается на pg_attribute.attnum)

Номер описываемого столбца

stainherit

bool

Если true, статистика включает значения из дочерних таблиц, а не только значения в указанном отношении

stanullfrac

float4

Доля записей столбца, которые равны нулю

stawidth

int4

Средняя сохраненная ширина ненулевых записей в байтах

stadistinct

float4

Количество различных ненулевых значений данных в столбце. Значение больше нуля — это фактическое количество различных значений. Значение меньше нуля - это отрицательное значение множителя для количества строк в таблице; например, столбец, в котором около 80% значений ненулевые и каждое ненулевое значение появляется в среднем около двух раз, может быть представлен stadistinct = -0.4

stakindN

int2

Кодовый номер, указывающий тип статистики, хранящейся в N-ом «слоте» строки pg_statistic

staopN

oid (ссылается на pg_operator.oid)

Оператор, используемый для получения статистики, хранящейся в Nth «слоте». Например, слот гистограммы будет показывать оператор <, который определяет порядок сортировки данных. Ноль, если вид статистики не требует оператора

stacollN

oid (ссылается на pg_collation.oid)

Сортировка, используемая для получения статистики, хранящейся в N-ом «слоте». Например, слот гистограммы для сопоставляемого столбца будет показывать сортировку, которая определяет порядок сортировки данных. Ноль для данных, которые не сопоставляются

stanumbersN

float4[]

Численная статистика соответствующего типа для N-го «слота», или нулевая, если тип слота не включает числовые значения

stavaluesN

anyarray

Значения данных столбцов любого массива соответствующего типа для N-го «слота» или нулевые, если тип слота не хранит значения данных. Значения элементов каждого массива фактически относятся к конкретному типу данных столбца или к связанному типу, такому как тип элемента массива, поэтому нет способа определить тип этих столбцов более конкретно, чем любой массив