1 /*------------------------------------------------------------------------- 2 * 3 * pg_class.h 4 * definition of the system "relation" relation (pg_class) 5 * along with the relation's initial contents. 6 * 7 * 8 * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group 9 * Portions Copyright (c) 1994, Regents of the University of California 10 * 11 * src/include/catalog/pg_class.h 12 * 13 * NOTES 14 * the genbki.pl script reads this file and generates .bki 15 * information from the DATA() statements. 16 * 17 *------------------------------------------------------------------------- 18 */ 19 #ifndef PG_CLASS_H 20 #define PG_CLASS_H 21 22 #include "catalog/genbki.h" 23 24 /* ---------------- 25 * pg_class definition. cpp turns this into 26 * typedef struct FormData_pg_class 27 * ---------------- 28 */ 29 #define RelationRelationId 1259 30 #define RelationRelation_Rowtype_Id 83 31 32 CATALOG(pg_class,1259) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83) BKI_SCHEMA_MACRO 33 { 34 NameData relname; /* class name */ 35 Oid relnamespace; /* OID of namespace containing this class */ 36 Oid reltype; /* OID of entry in pg_type for table's 37 * implicit row type */ 38 Oid reloftype; /* OID of entry in pg_type for underlying 39 * composite type */ 40 Oid relowner; /* class owner */ 41 Oid relam; /* index access method; 0 if not an index */ 42 Oid relfilenode; /* identifier of physical storage file */ 43 44 /* relfilenode == 0 means it is a "mapped" relation, see relmapper.c */ 45 Oid reltablespace; /* identifier of table space for relation */ 46 int32 relpages; /* # of blocks (not always up-to-date) */ 47 float4 reltuples; /* # of tuples (not always up-to-date) */ 48 int32 relallvisible; /* # of all-visible blocks (not always 49 * up-to-date) */ 50 Oid reltoastrelid; /* OID of toast table; 0 if none */ 51 bool relhasindex; /* T if has (or has had) any indexes */ 52 bool relisshared; /* T if shared across databases */ 53 char relpersistence; /* see RELPERSISTENCE_xxx constants below */ 54 char relkind; /* see RELKIND_xxx constants below */ 55 int16 relnatts; /* number of user attributes */ 56 57 /* 58 * Class pg_attribute must contain exactly "relnatts" user attributes 59 * (with attnums ranging from 1 to relnatts) for this class. It may also 60 * contain entries with negative attnums for system attributes. 61 */ 62 int16 relchecks; /* # of CHECK constraints for class */ 63 bool relhasoids; /* T if we generate OIDs for rows of rel */ 64 bool relhaspkey; /* has (or has had) PRIMARY KEY index */ 65 bool relhasrules; /* has (or has had) any rules */ 66 bool relhastriggers; /* has (or has had) any TRIGGERs */ 67 bool relhassubclass; /* has (or has had) derived classes */ 68 bool relrowsecurity; /* row security is enabled or not */ 69 bool relforcerowsecurity; /* row security forced for owners or 70 * not */ 71 bool relispopulated; /* matview currently holds query results */ 72 char relreplident; /* see REPLICA_IDENTITY_xxx constants */ 73 TransactionId relfrozenxid; /* all Xids < this are frozen in this rel */ 74 TransactionId relminmxid; /* all multixacts in this rel are >= this. 75 * this is really a MultiXactId */ 76 77 #ifdef CATALOG_VARLEN /* variable-length fields start here */ 78 /* NOTE: These fields are not present in a relcache entry's rd_rel field. */ 79 aclitem relacl[1]; /* access permissions */ 80 text reloptions[1]; /* access-method-specific options */ 81 #endif 82 } FormData_pg_class; 83 84 /* Size of fixed part of pg_class tuples, not counting var-length fields */ 85 #define CLASS_TUPLE_SIZE \ 86 (offsetof(FormData_pg_class,relminmxid) + sizeof(TransactionId)) 87 88 /* ---------------- 89 * Form_pg_class corresponds to a pointer to a tuple with 90 * the format of pg_class relation. 91 * ---------------- 92 */ 93 typedef FormData_pg_class *Form_pg_class; 94 95 /* ---------------- 96 * compiler constants for pg_class 97 * ---------------- 98 */ 99 100 #define Natts_pg_class 31 101 #define Anum_pg_class_relname 1 102 #define Anum_pg_class_relnamespace 2 103 #define Anum_pg_class_reltype 3 104 #define Anum_pg_class_reloftype 4 105 #define Anum_pg_class_relowner 5 106 #define Anum_pg_class_relam 6 107 #define Anum_pg_class_relfilenode 7 108 #define Anum_pg_class_reltablespace 8 109 #define Anum_pg_class_relpages 9 110 #define Anum_pg_class_reltuples 10 111 #define Anum_pg_class_relallvisible 11 112 #define Anum_pg_class_reltoastrelid 12 113 #define Anum_pg_class_relhasindex 13 114 #define Anum_pg_class_relisshared 14 115 #define Anum_pg_class_relpersistence 15 116 #define Anum_pg_class_relkind 16 117 #define Anum_pg_class_relnatts 17 118 #define Anum_pg_class_relchecks 18 119 #define Anum_pg_class_relhasoids 19 120 #define Anum_pg_class_relhaspkey 20 121 #define Anum_pg_class_relhasrules 21 122 #define Anum_pg_class_relhastriggers 22 123 #define Anum_pg_class_relhassubclass 23 124 #define Anum_pg_class_relrowsecurity 24 125 #define Anum_pg_class_relforcerowsecurity 25 126 #define Anum_pg_class_relispopulated 26 127 #define Anum_pg_class_relreplident 27 128 #define Anum_pg_class_relfrozenxid 28 129 #define Anum_pg_class_relminmxid 29 130 #define Anum_pg_class_relacl 30 131 #define Anum_pg_class_reloptions 31 132 133 /* ---------------- 134 * initial contents of pg_class 135 * 136 * NOTE: only "bootstrapped" relations need to be declared here. Be sure that 137 * the OIDs listed here match those given in their CATALOG macros, and that 138 * the relnatts values are correct. 139 * ---------------- 140 */ 141 142 /* 143 * Note: "3" in the relfrozenxid column stands for FirstNormalTransactionId; 144 * similarly, "1" in relminmxid stands for FirstMultiXactId 145 */ 146 DATA(insert OID = 1247 ( pg_type PGNSP 71 0 PGUID 0 0 0 0 0 0 0 f f p r 30 0 t f f f f f f t n 3 1 _null_ _null_ )); 147 DESCR(""); 148 DATA(insert OID = 1249 ( pg_attribute PGNSP 75 0 PGUID 0 0 0 0 0 0 0 f f p r 21 0 f f f f f f f t n 3 1 _null_ _null_ )); 149 DESCR(""); 150 DATA(insert OID = 1255 ( pg_proc PGNSP 81 0 PGUID 0 0 0 0 0 0 0 f f p r 29 0 t f f f f f f t n 3 1 _null_ _null_ )); 151 DESCR(""); 152 DATA(insert OID = 1259 ( pg_class PGNSP 83 0 PGUID 0 0 0 0 0 0 0 f f p r 31 0 t f f f f f f t n 3 1 _null_ _null_ )); 153 DESCR(""); 154 155 156 #define RELKIND_RELATION 'r' /* ordinary table */ 157 #define RELKIND_INDEX 'i' /* secondary index */ 158 #define RELKIND_SEQUENCE 'S' /* sequence object */ 159 #define RELKIND_TOASTVALUE 't' /* for out-of-line values */ 160 #define RELKIND_VIEW 'v' /* view */ 161 #define RELKIND_COMPOSITE_TYPE 'c' /* composite type */ 162 #define RELKIND_FOREIGN_TABLE 'f' /* foreign table */ 163 #define RELKIND_MATVIEW 'm' /* materialized view */ 164 165 #define RELPERSISTENCE_PERMANENT 'p' /* regular table */ 166 #define RELPERSISTENCE_UNLOGGED 'u' /* unlogged permanent table */ 167 #define RELPERSISTENCE_TEMP 't' /* temporary table */ 168 169 /* default selection for replica identity (primary key or nothing) */ 170 #define REPLICA_IDENTITY_DEFAULT 'd' 171 /* no replica identity is logged for this relation */ 172 #define REPLICA_IDENTITY_NOTHING 'n' 173 /* all columns are logged as replica identity */ 174 #define REPLICA_IDENTITY_FULL 'f' 175 /* 176 * an explicitly chosen candidate key's columns are used as identity; 177 * will still be set if the index has been dropped, in that case it 178 * has the same meaning as 'd' 179 */ 180 #define REPLICA_IDENTITY_INDEX 'i' 181 #endif /* PG_CLASS_H */ 182