1 /*------------------------------------------------------------------------- 2 * 3 * pg_statistic_d.h 4 * Macro definitions for pg_statistic 5 * 6 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group 7 * Portions Copyright (c) 1994, Regents of the University of California 8 * 9 * NOTES 10 * ****************************** 11 * *** DO NOT EDIT THIS FILE! *** 12 * ****************************** 13 * 14 * It has been GENERATED by src/backend/catalog/genbki.pl 15 * 16 *------------------------------------------------------------------------- 17 */ 18 #ifndef PG_STATISTIC_D_H 19 #define PG_STATISTIC_D_H 20 21 #define StatisticRelationId 2619 22 23 #define Anum_pg_statistic_starelid 1 24 #define Anum_pg_statistic_staattnum 2 25 #define Anum_pg_statistic_stainherit 3 26 #define Anum_pg_statistic_stanullfrac 4 27 #define Anum_pg_statistic_stawidth 5 28 #define Anum_pg_statistic_stadistinct 6 29 #define Anum_pg_statistic_stakind1 7 30 #define Anum_pg_statistic_stakind2 8 31 #define Anum_pg_statistic_stakind3 9 32 #define Anum_pg_statistic_stakind4 10 33 #define Anum_pg_statistic_stakind5 11 34 #define Anum_pg_statistic_staop1 12 35 #define Anum_pg_statistic_staop2 13 36 #define Anum_pg_statistic_staop3 14 37 #define Anum_pg_statistic_staop4 15 38 #define Anum_pg_statistic_staop5 16 39 #define Anum_pg_statistic_stacoll1 17 40 #define Anum_pg_statistic_stacoll2 18 41 #define Anum_pg_statistic_stacoll3 19 42 #define Anum_pg_statistic_stacoll4 20 43 #define Anum_pg_statistic_stacoll5 21 44 #define Anum_pg_statistic_stanumbers1 22 45 #define Anum_pg_statistic_stanumbers2 23 46 #define Anum_pg_statistic_stanumbers3 24 47 #define Anum_pg_statistic_stanumbers4 25 48 #define Anum_pg_statistic_stanumbers5 26 49 #define Anum_pg_statistic_stavalues1 27 50 #define Anum_pg_statistic_stavalues2 28 51 #define Anum_pg_statistic_stavalues3 29 52 #define Anum_pg_statistic_stavalues4 30 53 #define Anum_pg_statistic_stavalues5 31 54 55 #define Natts_pg_statistic 31 56 57 58 /* 59 * Several statistical slot "kinds" are defined by core PostgreSQL, as 60 * documented below. Also, custom data types can define their own "kind" 61 * codes by mutual agreement between a custom typanalyze routine and the 62 * selectivity estimation functions of the type's operators. 63 * 64 * Code reading the pg_statistic relation should not assume that a particular 65 * data "kind" will appear in any particular slot. Instead, search the 66 * stakind fields to see if the desired data is available. (The standard 67 * function get_attstatsslot() may be used for this.) 68 */ 69 70 /* 71 * The present allocation of "kind" codes is: 72 * 73 * 1-99: reserved for assignment by the core PostgreSQL project 74 * (values in this range will be documented in this file) 75 * 100-199: reserved for assignment by the PostGIS project 76 * (values to be documented in PostGIS documentation) 77 * 200-299: reserved for assignment by the ESRI ST_Geometry project 78 * (values to be documented in ESRI ST_Geometry documentation) 79 * 300-9999: reserved for future public assignments 80 * 81 * For private use you may choose a "kind" code at random in the range 82 * 10000-30000. However, for code that is to be widely disseminated it is 83 * better to obtain a publicly defined "kind" code by request from the 84 * PostgreSQL Global Development Group. 85 */ 86 87 /* 88 * In a "most common values" slot, staop is the OID of the "=" operator 89 * used to decide whether values are the same or not, and stacoll is the 90 * collation used (same as column's collation). stavalues contains 91 * the K most common non-null values appearing in the column, and stanumbers 92 * contains their frequencies (fractions of total row count). The values 93 * shall be ordered in decreasing frequency. Note that since the arrays are 94 * variable-size, K may be chosen by the statistics collector. Values should 95 * not appear in MCV unless they have been observed to occur more than once; 96 * a unique column will have no MCV slot. 97 */ 98 #define STATISTIC_KIND_MCV 1 99 100 /* 101 * A "histogram" slot describes the distribution of scalar data. staop is 102 * the OID of the "<" operator that describes the sort ordering, and stacoll 103 * is the relevant collation. (In theory more than one histogram could appear, 104 * if a datatype has more than one useful sort operator or we care about more 105 * than one collation. Currently the collation will always be that of the 106 * underlying column.) stavalues contains M (>=2) non-null values that 107 * divide the non-null column data values into M-1 bins of approximately equal 108 * population. The first stavalues item is the MIN and the last is the MAX. 109 * stanumbers is not used and should be NULL. IMPORTANT POINT: if an MCV 110 * slot is also provided, then the histogram describes the data distribution 111 * *after removing the values listed in MCV* (thus, it's a "compressed 112 * histogram" in the technical parlance). This allows a more accurate 113 * representation of the distribution of a column with some very-common 114 * values. In a column with only a few distinct values, it's possible that 115 * the MCV list describes the entire data population; in this case the 116 * histogram reduces to empty and should be omitted. 117 */ 118 #define STATISTIC_KIND_HISTOGRAM 2 119 120 /* 121 * A "correlation" slot describes the correlation between the physical order 122 * of table tuples and the ordering of data values of this column, as seen 123 * by the "<" operator identified by staop with the collation identified by 124 * stacoll. (As with the histogram, more than one entry could theoretically 125 * appear.) stavalues is not used and should be NULL. stanumbers contains 126 * a single entry, the correlation coefficient between the sequence of data 127 * values and the sequence of their actual tuple positions. The coefficient 128 * ranges from +1 to -1. 129 */ 130 #define STATISTIC_KIND_CORRELATION 3 131 132 /* 133 * A "most common elements" slot is similar to a "most common values" slot, 134 * except that it stores the most common non-null *elements* of the column 135 * values. This is useful when the column datatype is an array or some other 136 * type with identifiable elements (for instance, tsvector). staop contains 137 * the equality operator appropriate to the element type, and stacoll 138 * contains the collation to use with it. stavalues contains 139 * the most common element values, and stanumbers their frequencies. Unlike 140 * MCV slots, frequencies are measured as the fraction of non-null rows the 141 * element value appears in, not the frequency of all rows. Also unlike 142 * MCV slots, the values are sorted into the element type's default order 143 * (to support binary search for a particular value). Since this puts the 144 * minimum and maximum frequencies at unpredictable spots in stanumbers, 145 * there are two extra members of stanumbers, holding copies of the minimum 146 * and maximum frequencies. Optionally, there can be a third extra member, 147 * which holds the frequency of null elements (expressed in the same terms: 148 * the fraction of non-null rows that contain at least one null element). If 149 * this member is omitted, the column is presumed to contain no null elements. 150 * 151 * Note: in current usage for tsvector columns, the stavalues elements are of 152 * type text, even though their representation within tsvector is not 153 * exactly text. 154 */ 155 #define STATISTIC_KIND_MCELEM 4 156 157 /* 158 * A "distinct elements count histogram" slot describes the distribution of 159 * the number of distinct element values present in each row of an array-type 160 * column. Only non-null rows are considered, and only non-null elements. 161 * staop contains the equality operator appropriate to the element type, 162 * and stacoll contains the collation to use with it. 163 * stavalues is not used and should be NULL. The last member of stanumbers is 164 * the average count of distinct element values over all non-null rows. The 165 * preceding M (>=2) members form a histogram that divides the population of 166 * distinct-elements counts into M-1 bins of approximately equal population. 167 * The first of these is the minimum observed count, and the last the maximum. 168 */ 169 #define STATISTIC_KIND_DECHIST 5 170 171 /* 172 * A "length histogram" slot describes the distribution of range lengths in 173 * rows of a range-type column. stanumbers contains a single entry, the 174 * fraction of empty ranges. stavalues is a histogram of non-empty lengths, in 175 * a format similar to STATISTIC_KIND_HISTOGRAM: it contains M (>=2) range 176 * values that divide the column data values into M-1 bins of approximately 177 * equal population. The lengths are stored as float8s, as measured by the 178 * range type's subdiff function. Only non-null rows are considered. 179 */ 180 #define STATISTIC_KIND_RANGE_LENGTH_HISTOGRAM 6 181 182 /* 183 * A "bounds histogram" slot is similar to STATISTIC_KIND_HISTOGRAM, but for 184 * a range-type column. stavalues contains M (>=2) range values that divide 185 * the column data values into M-1 bins of approximately equal population. 186 * Unlike a regular scalar histogram, this is actually two histograms combined 187 * into a single array, with the lower bounds of each value forming a 188 * histogram of lower bounds, and the upper bounds a histogram of upper 189 * bounds. Only non-NULL, non-empty ranges are included. 190 */ 191 #define STATISTIC_KIND_BOUNDS_HISTOGRAM 7 192 193 194 #endif /* PG_STATISTIC_D_H */ 195