1 /*------------------------------------------------------------------------- 2 * 3 * pg_statistic_ext.h 4 * definition of the "extended statistics" system catalog 5 * (pg_statistic_ext) 6 * 7 * Note that pg_statistic_ext contains the definitions of extended statistics 8 * objects, created by CREATE STATISTICS, but not the actual statistical data, 9 * created by running ANALYZE. 10 * 11 * Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group 12 * Portions Copyright (c) 1994, Regents of the University of California 13 * 14 * src/include/catalog/pg_statistic_ext.h 15 * 16 * NOTES 17 * The Catalog.pm module reads this file and derives schema 18 * information. 19 * 20 *------------------------------------------------------------------------- 21 */ 22 #ifndef PG_STATISTIC_EXT_H 23 #define PG_STATISTIC_EXT_H 24 25 #include "catalog/genbki.h" 26 #include "catalog/pg_statistic_ext_d.h" 27 28 /* ---------------- 29 * pg_statistic_ext definition. cpp turns this into 30 * typedef struct FormData_pg_statistic_ext 31 * ---------------- 32 */ 33 CATALOG(pg_statistic_ext,3381,StatisticExtRelationId) 34 { 35 Oid oid; /* oid */ 36 37 Oid stxrelid BKI_LOOKUP(pg_class); /* relation containing 38 * attributes */ 39 40 /* These two fields form the unique key for the entry: */ 41 NameData stxname; /* statistics object name */ 42 Oid stxnamespace BKI_LOOKUP(pg_namespace); /* OID of statistics 43 * object's namespace */ 44 45 Oid stxowner BKI_LOOKUP(pg_authid); /* statistics object's owner */ 46 int32 stxstattarget BKI_DEFAULT(-1); /* statistics target */ 47 48 /* 49 * variable-length fields start here, but we allow direct access to 50 * stxkeys 51 */ 52 int2vector stxkeys BKI_FORCE_NOT_NULL; /* array of column keys */ 53 54 #ifdef CATALOG_VARLEN 55 char stxkind[1] BKI_FORCE_NOT_NULL; /* statistics kinds requested 56 * to build */ 57 pg_node_tree stxexprs; /* A list of expression trees for stats 58 * attributes that are not simple column 59 * references. */ 60 #endif 61 62 } FormData_pg_statistic_ext; 63 64 /* ---------------- 65 * Form_pg_statistic_ext corresponds to a pointer to a tuple with 66 * the format of pg_statistic_ext relation. 67 * ---------------- 68 */ 69 typedef FormData_pg_statistic_ext *Form_pg_statistic_ext; 70 71 DECLARE_TOAST(pg_statistic_ext, 3439, 3440); 72 73 DECLARE_UNIQUE_INDEX_PKEY(pg_statistic_ext_oid_index, 3380, on pg_statistic_ext using btree(oid oid_ops)); 74 #define StatisticExtOidIndexId 3380 75 DECLARE_UNIQUE_INDEX(pg_statistic_ext_name_index, 3997, on pg_statistic_ext using btree(stxname name_ops, stxnamespace oid_ops)); 76 #define StatisticExtNameIndexId 3997 77 DECLARE_INDEX(pg_statistic_ext_relid_index, 3379, on pg_statistic_ext using btree(stxrelid oid_ops)); 78 #define StatisticExtRelidIndexId 3379 79 80 DECLARE_ARRAY_FOREIGN_KEY((stxrelid, stxkeys), pg_attribute, (attrelid, attnum)); 81 82 #ifdef EXPOSE_TO_CLIENT_CODE 83 84 #define STATS_EXT_NDISTINCT 'd' 85 #define STATS_EXT_DEPENDENCIES 'f' 86 #define STATS_EXT_MCV 'm' 87 #define STATS_EXT_EXPRESSIONS 'e' 88 89 #endif /* EXPOSE_TO_CLIENT_CODE */ 90 91 #endif /* PG_STATISTIC_EXT_H */ 92