Перейти к основному содержимому

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, которое раскрывает информацию только о для чтения таблицах текущему пользователю.

СтолбецТип данныхОписание
starelidoid (ссылается на pg_class.oid)Таблица или индекс, к которому принадлежит описанный столбец
staattnumint2 (ссылается на pg_attribute.attnum)Номер описываемого столбца
stainheritboolЕсли true, статистика включает значения из дочерних таблиц, а не только значения в указанном отношении
stanullfracfloat4Доля записей столбца, которые равны нулю
stawidthint4Средняя сохраненная ширина ненулевых записей в байтах
stadistinctfloat4Количество различных ненулевых значений данных в столбце. Значение больше нуля — это фактическое количество различных значений. Значение меньше нуля - это отрицательное значение множителя для количества строк в таблице; например, столбец, в котором около 80% значений ненулевые и каждое ненулевое значение появляется в среднем около двух раз, может быть представлен stadistinct = -0.4
stakindNint2Кодовый номер, указывающий тип статистики, хранящейся в N-ом «слоте» строки pg_statistic
staopNoid (ссылается на pg_operator.oid)Оператор, используемый для получения статистики, хранящейся в Nth «слоте». Например, слот гистограммы будет показывать оператор <, который определяет порядок сортировки данных. Ноль, если вид статистики не требует оператора
stacollNoid (ссылается на pg_collation.oid)Сортировка, используемая для получения статистики, хранящейся в N-ом «слоте». Например, слот гистограммы для сопоставляемого столбца будет показывать сортировку, которая определяет порядок сортировки данных. Ноль для данных, которые не сопоставляются
stanumbersNfloat4[]Численная статистика соответствующего типа для N-го «слота», или нулевая, если тип слота не включает числовые значения
stavaluesNanyarrayЗначения данных столбцов любого массива соответствующего типа для N-го "слота" или нулевые, если тип слота не хранит значения данных. Значения элементов каждого массива фактически относятся к конкретному типу данных столбца или к связанному типу, такому как тип элемента массива, поэтому нет способа определить тип этих столбцов более конкретно, чем любой массив