1 /*------------------------------------------------------------------------- 2 * 3 * pg_type.h 4 * definition of the system "type" relation (pg_type) 5 * along with the relation's initial contents. 6 * 7 * 8 * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group 9 * Portions Copyright (c) 1994, Regents of the University of California 10 * 11 * src/include/catalog/pg_type.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_TYPE_H 20 #define PG_TYPE_H 21 22 #include "catalog/genbki.h" 23 24 /* ---------------- 25 * pg_type definition. cpp turns this into 26 * typedef struct FormData_pg_type 27 * 28 * Some of the values in a pg_type instance are copied into 29 * pg_attribute instances. Some parts of Postgres use the pg_type copy, 30 * while others use the pg_attribute copy, so they must match. 31 * See struct FormData_pg_attribute for details. 32 * ---------------- 33 */ 34 #define TypeRelationId 1247 35 #define TypeRelation_Rowtype_Id 71 36 37 CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71) BKI_SCHEMA_MACRO 38 { 39 NameData typname; /* type name */ 40 Oid typnamespace; /* OID of namespace containing this type */ 41 Oid typowner; /* type owner */ 42 43 /* 44 * For a fixed-size type, typlen is the number of bytes we use to 45 * represent a value of this type, e.g. 4 for an int4. But for a 46 * variable-length type, typlen is negative. We use -1 to indicate a 47 * "varlena" type (one that has a length word), -2 to indicate a 48 * null-terminated C string. 49 */ 50 int16 typlen; 51 52 /* 53 * typbyval determines whether internal Postgres routines pass a value of 54 * this type by value or by reference. typbyval had better be FALSE if 55 * the length is not 1, 2, or 4 (or 8 on 8-byte-Datum machines). 56 * Variable-length types are always passed by reference. Note that 57 * typbyval can be false even if the length would allow pass-by-value; 58 * this is currently true for type float4, for example. 59 */ 60 bool typbyval; 61 62 /* 63 * typtype is 'b' for a base type, 'c' for a composite type (e.g., a 64 * table's rowtype), 'd' for a domain, 'e' for an enum type, 'p' for a 65 * pseudo-type, or 'r' for a range type. (Use the TYPTYPE macros below.) 66 * 67 * If typtype is 'c', typrelid is the OID of the class' entry in pg_class. 68 */ 69 char typtype; 70 71 /* 72 * typcategory and typispreferred help the parser distinguish preferred 73 * and non-preferred coercions. The category can be any single ASCII 74 * character (but not \0). The categories used for built-in types are 75 * identified by the TYPCATEGORY macros below. 76 */ 77 char typcategory; /* arbitrary type classification */ 78 79 bool typispreferred; /* is type "preferred" within its category? */ 80 81 /* 82 * If typisdefined is false, the entry is only a placeholder (forward 83 * reference). We know the type name, but not yet anything else about it. 84 */ 85 bool typisdefined; 86 87 char typdelim; /* delimiter for arrays of this type */ 88 89 Oid typrelid; /* 0 if not a composite type */ 90 91 /* 92 * If typelem is not 0 then it identifies another row in pg_type. The 93 * current type can then be subscripted like an array yielding values of 94 * type typelem. A non-zero typelem does not guarantee this type to be a 95 * "real" array type; some ordinary fixed-length types can also be 96 * subscripted (e.g., name, point). Variable-length types can *not* be 97 * turned into pseudo-arrays like that. Hence, the way to determine 98 * whether a type is a "true" array type is if: 99 * 100 * typelem != 0 and typlen == -1. 101 */ 102 Oid typelem; 103 104 /* 105 * If there is a "true" array type having this type as element type, 106 * typarray links to it. Zero if no associated "true" array type. 107 */ 108 Oid typarray; 109 110 /* 111 * I/O conversion procedures for the datatype. 112 */ 113 regproc typinput; /* text format (required) */ 114 regproc typoutput; 115 regproc typreceive; /* binary format (optional) */ 116 regproc typsend; 117 118 /* 119 * I/O functions for optional type modifiers. 120 */ 121 regproc typmodin; 122 regproc typmodout; 123 124 /* 125 * Custom ANALYZE procedure for the datatype (0 selects the default). 126 */ 127 regproc typanalyze; 128 129 /* ---------------- 130 * typalign is the alignment required when storing a value of this 131 * type. It applies to storage on disk as well as most 132 * representations of the value inside Postgres. When multiple values 133 * are stored consecutively, such as in the representation of a 134 * complete row on disk, padding is inserted before a datum of this 135 * type so that it begins on the specified boundary. The alignment 136 * reference is the beginning of the first datum in the sequence. 137 * 138 * 'c' = CHAR alignment, ie no alignment needed. 139 * 's' = SHORT alignment (2 bytes on most machines). 140 * 'i' = INT alignment (4 bytes on most machines). 141 * 'd' = DOUBLE alignment (8 bytes on many machines, but by no means all). 142 * 143 * See include/access/tupmacs.h for the macros that compute these 144 * alignment requirements. Note also that we allow the nominal alignment 145 * to be violated when storing "packed" varlenas; the TOAST mechanism 146 * takes care of hiding that from most code. 147 * 148 * NOTE: for types used in system tables, it is critical that the 149 * size and alignment defined in pg_type agree with the way that the 150 * compiler will lay out the field in a struct representing a table row. 151 * ---------------- 152 */ 153 char typalign; 154 155 /* ---------------- 156 * typstorage tells if the type is prepared for toasting and what 157 * the default strategy for attributes of this type should be. 158 * 159 * 'p' PLAIN type not prepared for toasting 160 * 'e' EXTERNAL external storage possible, don't try to compress 161 * 'x' EXTENDED try to compress and store external if required 162 * 'm' MAIN like 'x' but try to keep in main tuple 163 * ---------------- 164 */ 165 char typstorage; 166 167 /* 168 * This flag represents a "NOT NULL" constraint against this datatype. 169 * 170 * If true, the attnotnull column for a corresponding table column using 171 * this datatype will always enforce the NOT NULL constraint. 172 * 173 * Used primarily for domain types. 174 */ 175 bool typnotnull; 176 177 /* 178 * Domains use typbasetype to show the base (or domain) type that the 179 * domain is based on. Zero if the type is not a domain. 180 */ 181 Oid typbasetype; 182 183 /* 184 * Domains use typtypmod to record the typmod to be applied to their base 185 * type (-1 if base type does not use a typmod). -1 if this type is not a 186 * domain. 187 */ 188 int32 typtypmod; 189 190 /* 191 * typndims is the declared number of dimensions for an array domain type 192 * (i.e., typbasetype is an array type). Otherwise zero. 193 */ 194 int32 typndims; 195 196 /* 197 * Collation: 0 if type cannot use collations, DEFAULT_COLLATION_OID for 198 * collatable base types, possibly other OID for domains 199 */ 200 Oid typcollation; 201 202 #ifdef CATALOG_VARLEN /* variable-length fields start here */ 203 204 /* 205 * If typdefaultbin is not NULL, it is the nodeToString representation of 206 * a default expression for the type. Currently this is only used for 207 * domains. 208 */ 209 pg_node_tree typdefaultbin; 210 211 /* 212 * typdefault is NULL if the type has no associated default value. If 213 * typdefaultbin is not NULL, typdefault must contain a human-readable 214 * version of the default expression represented by typdefaultbin. If 215 * typdefaultbin is NULL and typdefault is not, then typdefault is the 216 * external representation of the type's default value, which may be fed 217 * to the type's input converter to produce a constant. 218 */ 219 text typdefault; 220 221 /* 222 * Access permissions 223 */ 224 aclitem typacl[1]; 225 #endif 226 } FormData_pg_type; 227 228 /* ---------------- 229 * Form_pg_type corresponds to a pointer to a row with 230 * the format of pg_type relation. 231 * ---------------- 232 */ 233 typedef FormData_pg_type *Form_pg_type; 234 235 /* ---------------- 236 * compiler constants for pg_type 237 * ---------------- 238 */ 239 #define Natts_pg_type 30 240 #define Anum_pg_type_typname 1 241 #define Anum_pg_type_typnamespace 2 242 #define Anum_pg_type_typowner 3 243 #define Anum_pg_type_typlen 4 244 #define Anum_pg_type_typbyval 5 245 #define Anum_pg_type_typtype 6 246 #define Anum_pg_type_typcategory 7 247 #define Anum_pg_type_typispreferred 8 248 #define Anum_pg_type_typisdefined 9 249 #define Anum_pg_type_typdelim 10 250 #define Anum_pg_type_typrelid 11 251 #define Anum_pg_type_typelem 12 252 #define Anum_pg_type_typarray 13 253 #define Anum_pg_type_typinput 14 254 #define Anum_pg_type_typoutput 15 255 #define Anum_pg_type_typreceive 16 256 #define Anum_pg_type_typsend 17 257 #define Anum_pg_type_typmodin 18 258 #define Anum_pg_type_typmodout 19 259 #define Anum_pg_type_typanalyze 20 260 #define Anum_pg_type_typalign 21 261 #define Anum_pg_type_typstorage 22 262 #define Anum_pg_type_typnotnull 23 263 #define Anum_pg_type_typbasetype 24 264 #define Anum_pg_type_typtypmod 25 265 #define Anum_pg_type_typndims 26 266 #define Anum_pg_type_typcollation 27 267 #define Anum_pg_type_typdefaultbin 28 268 #define Anum_pg_type_typdefault 29 269 #define Anum_pg_type_typacl 30 270 271 272 /* ---------------- 273 * initial contents of pg_type 274 * ---------------- 275 */ 276 277 /* 278 * Keep the following ordered by OID so that later changes can be made more 279 * easily. 280 * 281 * For types used in the system catalogs, make sure the values here match 282 * TypInfo[] in bootstrap.c. 283 */ 284 285 /* OIDS 1 - 99 */ 286 DATA(insert OID = 16 ( bool PGNSP PGUID 1 t b B t t \054 0 0 1000 boolin boolout boolrecv boolsend - - - c p f 0 -1 0 0 _null_ _null_ _null_ )); 287 DESCR("boolean, 'true'/'false'"); 288 #define BOOLOID 16 289 290 DATA(insert OID = 17 ( bytea PGNSP PGUID -1 f b U f t \054 0 0 1001 byteain byteaout bytearecv byteasend - - - i x f 0 -1 0 0 _null_ _null_ _null_ )); 291 DESCR("variable-length string, binary values escaped"); 292 #define BYTEAOID 17 293 294 DATA(insert OID = 18 ( char PGNSP PGUID 1 t b S f t \054 0 0 1002 charin charout charrecv charsend - - - c p f 0 -1 0 0 _null_ _null_ _null_ )); 295 DESCR("single character"); 296 #define CHAROID 18 297 298 DATA(insert OID = 19 ( name PGNSP PGUID NAMEDATALEN f b S f t \054 0 18 1003 namein nameout namerecv namesend - - - c p f 0 -1 0 0 _null_ _null_ _null_ )); 299 DESCR("63-byte type for storing system identifiers"); 300 #define NAMEOID 19 301 302 DATA(insert OID = 20 ( int8 PGNSP PGUID 8 FLOAT8PASSBYVAL b N f t \054 0 0 1016 int8in int8out int8recv int8send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 303 DESCR("~18 digit integer, 8-byte storage"); 304 #define INT8OID 20 305 306 DATA(insert OID = 21 ( int2 PGNSP PGUID 2 t b N f t \054 0 0 1005 int2in int2out int2recv int2send - - - s p f 0 -1 0 0 _null_ _null_ _null_ )); 307 DESCR("-32 thousand to 32 thousand, 2-byte storage"); 308 #define INT2OID 21 309 310 DATA(insert OID = 22 ( int2vector PGNSP PGUID -1 f b A f t \054 0 21 1006 int2vectorin int2vectorout int2vectorrecv int2vectorsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 311 DESCR("array of int2, used in system tables"); 312 #define INT2VECTOROID 22 313 314 DATA(insert OID = 23 ( int4 PGNSP PGUID 4 t b N f t \054 0 0 1007 int4in int4out int4recv int4send - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 315 DESCR("-2 billion to 2 billion integer, 4-byte storage"); 316 #define INT4OID 23 317 318 DATA(insert OID = 24 ( regproc PGNSP PGUID 4 t b N f t \054 0 0 1008 regprocin regprocout regprocrecv regprocsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 319 DESCR("registered procedure"); 320 #define REGPROCOID 24 321 322 DATA(insert OID = 25 ( text PGNSP PGUID -1 f b S t t \054 0 0 1009 textin textout textrecv textsend - - - i x f 0 -1 0 100 _null_ _null_ _null_ )); 323 DESCR("variable-length string, no limit specified"); 324 #define TEXTOID 25 325 326 DATA(insert OID = 26 ( oid PGNSP PGUID 4 t b N t t \054 0 0 1028 oidin oidout oidrecv oidsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 327 DESCR("object identifier(oid), maximum 4 billion"); 328 #define OIDOID 26 329 330 DATA(insert OID = 27 ( tid PGNSP PGUID 6 f b U f t \054 0 0 1010 tidin tidout tidrecv tidsend - - - s p f 0 -1 0 0 _null_ _null_ _null_ )); 331 DESCR("(block, offset), physical location of tuple"); 332 #define TIDOID 27 333 334 DATA(insert OID = 28 ( xid PGNSP PGUID 4 t b U f t \054 0 0 1011 xidin xidout xidrecv xidsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 335 DESCR("transaction id"); 336 #define XIDOID 28 337 338 DATA(insert OID = 29 ( cid PGNSP PGUID 4 t b U f t \054 0 0 1012 cidin cidout cidrecv cidsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 339 DESCR("command identifier type, sequence in transaction id"); 340 #define CIDOID 29 341 342 DATA(insert OID = 30 ( oidvector PGNSP PGUID -1 f b A f t \054 0 26 1013 oidvectorin oidvectorout oidvectorrecv oidvectorsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 343 DESCR("array of oids, used in system tables"); 344 #define OIDVECTOROID 30 345 346 /* hand-built rowtype entries for bootstrapped catalogs */ 347 /* NB: OIDs assigned here must match the BKI_ROWTYPE_OID declarations */ 348 349 DATA(insert OID = 71 ( pg_type PGNSP PGUID -1 f c C f t \054 1247 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 350 DATA(insert OID = 75 ( pg_attribute PGNSP PGUID -1 f c C f t \054 1249 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 351 DATA(insert OID = 81 ( pg_proc PGNSP PGUID -1 f c C f t \054 1255 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 352 DATA(insert OID = 83 ( pg_class PGNSP PGUID -1 f c C f t \054 1259 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 353 354 /* OIDS 100 - 199 */ 355 DATA(insert OID = 114 ( json PGNSP PGUID -1 f b U f t \054 0 0 199 json_in json_out json_recv json_send - - - i x f 0 -1 0 0 _null_ _null_ _null_ )); 356 #define JSONOID 114 357 DATA(insert OID = 142 ( xml PGNSP PGUID -1 f b U f t \054 0 0 143 xml_in xml_out xml_recv xml_send - - - i x f 0 -1 0 0 _null_ _null_ _null_ )); 358 DESCR("XML content"); 359 #define XMLOID 142 360 DATA(insert OID = 143 ( _xml PGNSP PGUID -1 f b A f t \054 0 142 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 361 DATA(insert OID = 199 ( _json PGNSP PGUID -1 f b A f t \054 0 114 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 362 363 DATA(insert OID = 194 ( pg_node_tree PGNSP PGUID -1 f b S f t \054 0 0 0 pg_node_tree_in pg_node_tree_out pg_node_tree_recv pg_node_tree_send - - - i x f 0 -1 0 100 _null_ _null_ _null_ )); 364 DESCR("string representing an internal node tree"); 365 #define PGNODETREEOID 194 366 367 DATA(insert OID = 3361 ( pg_ndistinct PGNSP PGUID -1 f b S f t \054 0 0 0 pg_ndistinct_in pg_ndistinct_out pg_ndistinct_recv pg_ndistinct_send - - - i x f 0 -1 0 100 _null_ _null_ _null_ )); 368 DESCR("multivariate ndistinct coefficients"); 369 #define PGNDISTINCTOID 3361 370 371 DATA(insert OID = 3402 ( pg_dependencies PGNSP PGUID -1 f b S f t \054 0 0 0 pg_dependencies_in pg_dependencies_out pg_dependencies_recv pg_dependencies_send - - - i x f 0 -1 0 100 _null_ _null_ _null_ )); 372 DESCR("multivariate dependencies"); 373 #define PGDEPENDENCIESOID 3402 374 375 DATA(insert OID = 32 ( pg_ddl_command PGNSP PGUID SIZEOF_POINTER t p P f t \054 0 0 0 pg_ddl_command_in pg_ddl_command_out pg_ddl_command_recv pg_ddl_command_send - - - ALIGNOF_POINTER p f 0 -1 0 0 _null_ _null_ _null_ )); 376 DESCR("internal type for passing CollectedCommand"); 377 #define PGDDLCOMMANDOID 32 378 379 /* OIDS 200 - 299 */ 380 381 DATA(insert OID = 210 ( smgr PGNSP PGUID 2 t b U f t \054 0 0 0 smgrin smgrout - - - - - s p f 0 -1 0 0 _null_ _null_ _null_ )); 382 DESCR("storage manager"); 383 384 /* OIDS 300 - 399 */ 385 386 /* OIDS 400 - 499 */ 387 388 /* OIDS 500 - 599 */ 389 390 /* OIDS 600 - 699 */ 391 DATA(insert OID = 600 ( point PGNSP PGUID 16 f b G f t \054 0 701 1017 point_in point_out point_recv point_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 392 DESCR("geometric point '(x, y)'"); 393 #define POINTOID 600 394 DATA(insert OID = 601 ( lseg PGNSP PGUID 32 f b G f t \054 0 600 1018 lseg_in lseg_out lseg_recv lseg_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 395 DESCR("geometric line segment '(pt1,pt2)'"); 396 #define LSEGOID 601 397 DATA(insert OID = 602 ( path PGNSP PGUID -1 f b G f t \054 0 0 1019 path_in path_out path_recv path_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 398 DESCR("geometric path '(pt1,...)'"); 399 #define PATHOID 602 400 DATA(insert OID = 603 ( box PGNSP PGUID 32 f b G f t \073 0 600 1020 box_in box_out box_recv box_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 401 DESCR("geometric box '(lower left,upper right)'"); 402 #define BOXOID 603 403 DATA(insert OID = 604 ( polygon PGNSP PGUID -1 f b G f t \054 0 0 1027 poly_in poly_out poly_recv poly_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 404 DESCR("geometric polygon '(pt1,...)'"); 405 #define POLYGONOID 604 406 407 DATA(insert OID = 628 ( line PGNSP PGUID 24 f b G f t \054 0 701 629 line_in line_out line_recv line_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 408 DESCR("geometric line"); 409 #define LINEOID 628 410 DATA(insert OID = 629 ( _line PGNSP PGUID -1 f b A f t \054 0 628 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 411 412 /* OIDS 700 - 799 */ 413 414 DATA(insert OID = 700 ( float4 PGNSP PGUID 4 FLOAT4PASSBYVAL b N f t \054 0 0 1021 float4in float4out float4recv float4send - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 415 DESCR("single-precision floating point number, 4-byte storage"); 416 #define FLOAT4OID 700 417 DATA(insert OID = 701 ( float8 PGNSP PGUID 8 FLOAT8PASSBYVAL b N t t \054 0 0 1022 float8in float8out float8recv float8send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 418 DESCR("double-precision floating point number, 8-byte storage"); 419 #define FLOAT8OID 701 420 DATA(insert OID = 702 ( abstime PGNSP PGUID 4 t b D f t \054 0 0 1023 abstimein abstimeout abstimerecv abstimesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 421 DESCR("absolute, limited-range date and time (Unix system time)"); 422 #define ABSTIMEOID 702 423 DATA(insert OID = 703 ( reltime PGNSP PGUID 4 t b T f t \054 0 0 1024 reltimein reltimeout reltimerecv reltimesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 424 DESCR("relative, limited-range time interval (Unix delta time)"); 425 #define RELTIMEOID 703 426 DATA(insert OID = 704 ( tinterval PGNSP PGUID 12 f b T f t \054 0 0 1025 tintervalin tintervalout tintervalrecv tintervalsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 427 DESCR("(abstime,abstime), time interval"); 428 #define TINTERVALOID 704 429 DATA(insert OID = 705 ( unknown PGNSP PGUID -2 f p X f t \054 0 0 0 unknownin unknownout unknownrecv unknownsend - - - c p f 0 -1 0 0 _null_ _null_ _null_ )); 430 DESCR(""); 431 #define UNKNOWNOID 705 432 433 DATA(insert OID = 718 ( circle PGNSP PGUID 24 f b G f t \054 0 0 719 circle_in circle_out circle_recv circle_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 434 DESCR("geometric circle '(center,radius)'"); 435 #define CIRCLEOID 718 436 DATA(insert OID = 719 ( _circle PGNSP PGUID -1 f b A f t \054 0 718 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 437 DATA(insert OID = 790 ( money PGNSP PGUID 8 FLOAT8PASSBYVAL b N f t \054 0 0 791 cash_in cash_out cash_recv cash_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 438 DESCR("monetary amounts, $d,ddd.cc"); 439 #define CASHOID 790 440 DATA(insert OID = 791 ( _money PGNSP PGUID -1 f b A f t \054 0 790 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 441 442 /* OIDS 800 - 899 */ 443 DATA(insert OID = 829 ( macaddr PGNSP PGUID 6 f b U f t \054 0 0 1040 macaddr_in macaddr_out macaddr_recv macaddr_send - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 444 DESCR("XX:XX:XX:XX:XX:XX, MAC address"); 445 #define MACADDROID 829 446 DATA(insert OID = 869 ( inet PGNSP PGUID -1 f b I t t \054 0 0 1041 inet_in inet_out inet_recv inet_send - - - i m f 0 -1 0 0 _null_ _null_ _null_ )); 447 DESCR("IP address/netmask, host address, netmask optional"); 448 #define INETOID 869 449 DATA(insert OID = 650 ( cidr PGNSP PGUID -1 f b I f t \054 0 0 651 cidr_in cidr_out cidr_recv cidr_send - - - i m f 0 -1 0 0 _null_ _null_ _null_ )); 450 DESCR("network IP address/netmask, network address"); 451 #define CIDROID 650 452 DATA(insert OID = 774 ( macaddr8 PGNSP PGUID 8 f b U f t \054 0 0 775 macaddr8_in macaddr8_out macaddr8_recv macaddr8_send - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 453 DESCR("XX:XX:XX:XX:XX:XX:XX:XX, MAC address"); 454 #define MACADDR8OID 774 455 456 /* OIDS 900 - 999 */ 457 458 /* OIDS 1000 - 1099 */ 459 DATA(insert OID = 1000 ( _bool PGNSP PGUID -1 f b A f t \054 0 16 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 460 DATA(insert OID = 1001 ( _bytea PGNSP PGUID -1 f b A f t \054 0 17 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 461 DATA(insert OID = 1002 ( _char PGNSP PGUID -1 f b A f t \054 0 18 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 462 DATA(insert OID = 1003 ( _name PGNSP PGUID -1 f b A f t \054 0 19 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 463 DATA(insert OID = 1005 ( _int2 PGNSP PGUID -1 f b A f t \054 0 21 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 464 #define INT2ARRAYOID 1005 465 DATA(insert OID = 1006 ( _int2vector PGNSP PGUID -1 f b A f t \054 0 22 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 466 DATA(insert OID = 1007 ( _int4 PGNSP PGUID -1 f b A f t \054 0 23 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 467 #define INT4ARRAYOID 1007 468 DATA(insert OID = 1008 ( _regproc PGNSP PGUID -1 f b A f t \054 0 24 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 469 DATA(insert OID = 1009 ( _text PGNSP PGUID -1 f b A f t \054 0 25 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 100 _null_ _null_ _null_ )); 470 #define TEXTARRAYOID 1009 471 DATA(insert OID = 1028 ( _oid PGNSP PGUID -1 f b A f t \054 0 26 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 472 #define OIDARRAYOID 1028 473 DATA(insert OID = 1010 ( _tid PGNSP PGUID -1 f b A f t \054 0 27 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 474 DATA(insert OID = 1011 ( _xid PGNSP PGUID -1 f b A f t \054 0 28 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 475 DATA(insert OID = 1012 ( _cid PGNSP PGUID -1 f b A f t \054 0 29 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 476 DATA(insert OID = 1013 ( _oidvector PGNSP PGUID -1 f b A f t \054 0 30 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 477 DATA(insert OID = 1014 ( _bpchar PGNSP PGUID -1 f b A f t \054 0 1042 0 array_in array_out array_recv array_send bpchartypmodin bpchartypmodout array_typanalyze i x f 0 -1 0 100 _null_ _null_ _null_ )); 478 DATA(insert OID = 1015 ( _varchar PGNSP PGUID -1 f b A f t \054 0 1043 0 array_in array_out array_recv array_send varchartypmodin varchartypmodout array_typanalyze i x f 0 -1 0 100 _null_ _null_ _null_ )); 479 DATA(insert OID = 1016 ( _int8 PGNSP PGUID -1 f b A f t \054 0 20 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 480 DATA(insert OID = 1017 ( _point PGNSP PGUID -1 f b A f t \054 0 600 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 481 DATA(insert OID = 1018 ( _lseg PGNSP PGUID -1 f b A f t \054 0 601 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 482 DATA(insert OID = 1019 ( _path PGNSP PGUID -1 f b A f t \054 0 602 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 483 DATA(insert OID = 1020 ( _box PGNSP PGUID -1 f b A f t \073 0 603 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 484 DATA(insert OID = 1021 ( _float4 PGNSP PGUID -1 f b A f t \054 0 700 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 485 #define FLOAT4ARRAYOID 1021 486 DATA(insert OID = 1022 ( _float8 PGNSP PGUID -1 f b A f t \054 0 701 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 487 DATA(insert OID = 1023 ( _abstime PGNSP PGUID -1 f b A f t \054 0 702 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 488 DATA(insert OID = 1024 ( _reltime PGNSP PGUID -1 f b A f t \054 0 703 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 489 DATA(insert OID = 1025 ( _tinterval PGNSP PGUID -1 f b A f t \054 0 704 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 490 DATA(insert OID = 1027 ( _polygon PGNSP PGUID -1 f b A f t \054 0 604 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 491 DATA(insert OID = 1033 ( aclitem PGNSP PGUID 12 f b U f t \054 0 0 1034 aclitemin aclitemout - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 492 DESCR("access control list"); 493 #define ACLITEMOID 1033 494 DATA(insert OID = 1034 ( _aclitem PGNSP PGUID -1 f b A f t \054 0 1033 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 495 DATA(insert OID = 1040 ( _macaddr PGNSP PGUID -1 f b A f t \054 0 829 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 496 DATA(insert OID = 775 ( _macaddr8 PGNSP PGUID -1 f b A f t \054 0 774 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 497 DATA(insert OID = 1041 ( _inet PGNSP PGUID -1 f b A f t \054 0 869 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 498 DATA(insert OID = 651 ( _cidr PGNSP PGUID -1 f b A f t \054 0 650 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 499 DATA(insert OID = 1263 ( _cstring PGNSP PGUID -1 f b A f t \054 0 2275 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 500 #define CSTRINGARRAYOID 1263 501 502 DATA(insert OID = 1042 ( bpchar PGNSP PGUID -1 f b S f t \054 0 0 1014 bpcharin bpcharout bpcharrecv bpcharsend bpchartypmodin bpchartypmodout - i x f 0 -1 0 100 _null_ _null_ _null_ )); 503 DESCR("char(length), blank-padded string, fixed storage length"); 504 #define BPCHAROID 1042 505 DATA(insert OID = 1043 ( varchar PGNSP PGUID -1 f b S f t \054 0 0 1015 varcharin varcharout varcharrecv varcharsend varchartypmodin varchartypmodout - i x f 0 -1 0 100 _null_ _null_ _null_ )); 506 DESCR("varchar(length), non-blank-padded string, variable storage length"); 507 #define VARCHAROID 1043 508 509 DATA(insert OID = 1082 ( date PGNSP PGUID 4 t b D f t \054 0 0 1182 date_in date_out date_recv date_send - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 510 DESCR("date"); 511 #define DATEOID 1082 512 DATA(insert OID = 1083 ( time PGNSP PGUID 8 FLOAT8PASSBYVAL b D f t \054 0 0 1183 time_in time_out time_recv time_send timetypmodin timetypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ )); 513 DESCR("time of day"); 514 #define TIMEOID 1083 515 516 /* OIDS 1100 - 1199 */ 517 DATA(insert OID = 1114 ( timestamp PGNSP PGUID 8 FLOAT8PASSBYVAL b D f t \054 0 0 1115 timestamp_in timestamp_out timestamp_recv timestamp_send timestamptypmodin timestamptypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ )); 518 DESCR("date and time"); 519 #define TIMESTAMPOID 1114 520 DATA(insert OID = 1115 ( _timestamp PGNSP PGUID -1 f b A f t \054 0 1114 0 array_in array_out array_recv array_send timestamptypmodin timestamptypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 521 DATA(insert OID = 1182 ( _date PGNSP PGUID -1 f b A f t \054 0 1082 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 522 DATA(insert OID = 1183 ( _time PGNSP PGUID -1 f b A f t \054 0 1083 0 array_in array_out array_recv array_send timetypmodin timetypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 523 DATA(insert OID = 1184 ( timestamptz PGNSP PGUID 8 FLOAT8PASSBYVAL b D t t \054 0 0 1185 timestamptz_in timestamptz_out timestamptz_recv timestamptz_send timestamptztypmodin timestamptztypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ )); 524 DESCR("date and time with time zone"); 525 #define TIMESTAMPTZOID 1184 526 DATA(insert OID = 1185 ( _timestamptz PGNSP PGUID -1 f b A f t \054 0 1184 0 array_in array_out array_recv array_send timestamptztypmodin timestamptztypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 527 DATA(insert OID = 1186 ( interval PGNSP PGUID 16 f b T t t \054 0 0 1187 interval_in interval_out interval_recv interval_send intervaltypmodin intervaltypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ )); 528 DESCR("@ <number> <units>, time interval"); 529 #define INTERVALOID 1186 530 DATA(insert OID = 1187 ( _interval PGNSP PGUID -1 f b A f t \054 0 1186 0 array_in array_out array_recv array_send intervaltypmodin intervaltypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 531 532 /* OIDS 1200 - 1299 */ 533 DATA(insert OID = 1231 ( _numeric PGNSP PGUID -1 f b A f t \054 0 1700 0 array_in array_out array_recv array_send numerictypmodin numerictypmodout array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 534 DATA(insert OID = 1266 ( timetz PGNSP PGUID 12 f b D f t \054 0 0 1270 timetz_in timetz_out timetz_recv timetz_send timetztypmodin timetztypmodout - d p f 0 -1 0 0 _null_ _null_ _null_ )); 535 DESCR("time of day with time zone"); 536 #define TIMETZOID 1266 537 DATA(insert OID = 1270 ( _timetz PGNSP PGUID -1 f b A f t \054 0 1266 0 array_in array_out array_recv array_send timetztypmodin timetztypmodout array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 538 539 /* OIDS 1500 - 1599 */ 540 DATA(insert OID = 1560 ( bit PGNSP PGUID -1 f b V f t \054 0 0 1561 bit_in bit_out bit_recv bit_send bittypmodin bittypmodout - i x f 0 -1 0 0 _null_ _null_ _null_ )); 541 DESCR("fixed-length bit string"); 542 #define BITOID 1560 543 DATA(insert OID = 1561 ( _bit PGNSP PGUID -1 f b A f t \054 0 1560 0 array_in array_out array_recv array_send bittypmodin bittypmodout array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 544 DATA(insert OID = 1562 ( varbit PGNSP PGUID -1 f b V t t \054 0 0 1563 varbit_in varbit_out varbit_recv varbit_send varbittypmodin varbittypmodout - i x f 0 -1 0 0 _null_ _null_ _null_ )); 545 DESCR("variable-length bit string"); 546 #define VARBITOID 1562 547 DATA(insert OID = 1563 ( _varbit PGNSP PGUID -1 f b A f t \054 0 1562 0 array_in array_out array_recv array_send varbittypmodin varbittypmodout array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 548 549 /* OIDS 1600 - 1699 */ 550 551 /* OIDS 1700 - 1799 */ 552 DATA(insert OID = 1700 ( numeric PGNSP PGUID -1 f b N f t \054 0 0 1231 numeric_in numeric_out numeric_recv numeric_send numerictypmodin numerictypmodout - i m f 0 -1 0 0 _null_ _null_ _null_ )); 553 DESCR("numeric(precision, decimal), arbitrary precision number"); 554 #define NUMERICOID 1700 555 556 DATA(insert OID = 1790 ( refcursor PGNSP PGUID -1 f b U f t \054 0 0 2201 textin textout textrecv textsend - - - i x f 0 -1 0 0 _null_ _null_ _null_ )); 557 DESCR("reference to cursor (portal name)"); 558 #define REFCURSOROID 1790 559 560 /* OIDS 2200 - 2299 */ 561 DATA(insert OID = 2201 ( _refcursor PGNSP PGUID -1 f b A f t \054 0 1790 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 562 563 DATA(insert OID = 2202 ( regprocedure PGNSP PGUID 4 t b N f t \054 0 0 2207 regprocedurein regprocedureout regprocedurerecv regproceduresend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 564 DESCR("registered procedure (with args)"); 565 #define REGPROCEDUREOID 2202 566 567 DATA(insert OID = 2203 ( regoper PGNSP PGUID 4 t b N f t \054 0 0 2208 regoperin regoperout regoperrecv regopersend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 568 DESCR("registered operator"); 569 #define REGOPEROID 2203 570 571 DATA(insert OID = 2204 ( regoperator PGNSP PGUID 4 t b N f t \054 0 0 2209 regoperatorin regoperatorout regoperatorrecv regoperatorsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 572 DESCR("registered operator (with args)"); 573 #define REGOPERATOROID 2204 574 575 DATA(insert OID = 2205 ( regclass PGNSP PGUID 4 t b N f t \054 0 0 2210 regclassin regclassout regclassrecv regclasssend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 576 DESCR("registered class"); 577 #define REGCLASSOID 2205 578 579 DATA(insert OID = 2206 ( regtype PGNSP PGUID 4 t b N f t \054 0 0 2211 regtypein regtypeout regtyperecv regtypesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 580 DESCR("registered type"); 581 #define REGTYPEOID 2206 582 583 DATA(insert OID = 4096 ( regrole PGNSP PGUID 4 t b N f t \054 0 0 4097 regrolein regroleout regrolerecv regrolesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 584 DESCR("registered role"); 585 #define REGROLEOID 4096 586 587 DATA(insert OID = 4089 ( regnamespace PGNSP PGUID 4 t b N f t \054 0 0 4090 regnamespacein regnamespaceout regnamespacerecv regnamespacesend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 588 DESCR("registered namespace"); 589 #define REGNAMESPACEOID 4089 590 591 DATA(insert OID = 2207 ( _regprocedure PGNSP PGUID -1 f b A f t \054 0 2202 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 592 DATA(insert OID = 2208 ( _regoper PGNSP PGUID -1 f b A f t \054 0 2203 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 593 DATA(insert OID = 2209 ( _regoperator PGNSP PGUID -1 f b A f t \054 0 2204 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 594 DATA(insert OID = 2210 ( _regclass PGNSP PGUID -1 f b A f t \054 0 2205 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 595 DATA(insert OID = 2211 ( _regtype PGNSP PGUID -1 f b A f t \054 0 2206 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 596 #define REGTYPEARRAYOID 2211 597 DATA(insert OID = 4097 ( _regrole PGNSP PGUID -1 f b A f t \054 0 4096 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 598 DATA(insert OID = 4090 ( _regnamespace PGNSP PGUID -1 f b A f t \054 0 4089 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 599 600 /* uuid */ 601 DATA(insert OID = 2950 ( uuid PGNSP PGUID 16 f b U f t \054 0 0 2951 uuid_in uuid_out uuid_recv uuid_send - - - c p f 0 -1 0 0 _null_ _null_ _null_ )); 602 DESCR("UUID datatype"); 603 #define UUIDOID 2950 604 DATA(insert OID = 2951 ( _uuid PGNSP PGUID -1 f b A f t \054 0 2950 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 605 606 /* pg_lsn */ 607 DATA(insert OID = 3220 ( pg_lsn PGNSP PGUID 8 FLOAT8PASSBYVAL b U f t \054 0 0 3221 pg_lsn_in pg_lsn_out pg_lsn_recv pg_lsn_send - - - d p f 0 -1 0 0 _null_ _null_ _null_ )); 608 DESCR("PostgreSQL LSN datatype"); 609 #define LSNOID 3220 610 DATA(insert OID = 3221 ( _pg_lsn PGNSP PGUID -1 f b A f t \054 0 3220 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 611 612 /* text search */ 613 DATA(insert OID = 3614 ( tsvector PGNSP PGUID -1 f b U f t \054 0 0 3643 tsvectorin tsvectorout tsvectorrecv tsvectorsend - - ts_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 614 DESCR("text representation for text search"); 615 #define TSVECTOROID 3614 616 DATA(insert OID = 3642 ( gtsvector PGNSP PGUID -1 f b U f t \054 0 0 3644 gtsvectorin gtsvectorout - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 617 DESCR("GiST index internal text representation for text search"); 618 #define GTSVECTOROID 3642 619 DATA(insert OID = 3615 ( tsquery PGNSP PGUID -1 f b U f t \054 0 0 3645 tsqueryin tsqueryout tsqueryrecv tsquerysend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 620 DESCR("query representation for text search"); 621 #define TSQUERYOID 3615 622 DATA(insert OID = 3734 ( regconfig PGNSP PGUID 4 t b N f t \054 0 0 3735 regconfigin regconfigout regconfigrecv regconfigsend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 623 DESCR("registered text search configuration"); 624 #define REGCONFIGOID 3734 625 DATA(insert OID = 3769 ( regdictionary PGNSP PGUID 4 t b N f t \054 0 0 3770 regdictionaryin regdictionaryout regdictionaryrecv regdictionarysend - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 626 DESCR("registered text search dictionary"); 627 #define REGDICTIONARYOID 3769 628 629 DATA(insert OID = 3643 ( _tsvector PGNSP PGUID -1 f b A f t \054 0 3614 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 630 DATA(insert OID = 3644 ( _gtsvector PGNSP PGUID -1 f b A f t \054 0 3642 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 631 DATA(insert OID = 3645 ( _tsquery PGNSP PGUID -1 f b A f t \054 0 3615 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 632 DATA(insert OID = 3735 ( _regconfig PGNSP PGUID -1 f b A f t \054 0 3734 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 633 DATA(insert OID = 3770 ( _regdictionary PGNSP PGUID -1 f b A f t \054 0 3769 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 634 635 /* jsonb */ 636 DATA(insert OID = 3802 ( jsonb PGNSP PGUID -1 f b U f t \054 0 0 3807 jsonb_in jsonb_out jsonb_recv jsonb_send - - - i x f 0 -1 0 0 _null_ _null_ _null_ )); 637 DESCR("Binary JSON"); 638 #define JSONBOID 3802 639 DATA(insert OID = 3807 ( _jsonb PGNSP PGUID -1 f b A f t \054 0 3802 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 640 641 DATA(insert OID = 2970 ( txid_snapshot PGNSP PGUID -1 f b U f t \054 0 0 2949 txid_snapshot_in txid_snapshot_out txid_snapshot_recv txid_snapshot_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 642 DESCR("txid snapshot"); 643 DATA(insert OID = 2949 ( _txid_snapshot PGNSP PGUID -1 f b A f t \054 0 2970 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 644 645 /* range types */ 646 DATA(insert OID = 3904 ( int4range PGNSP PGUID -1 f r R f t \054 0 0 3905 range_in range_out range_recv range_send - - range_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 647 DESCR("range of integers"); 648 #define INT4RANGEOID 3904 649 DATA(insert OID = 3905 ( _int4range PGNSP PGUID -1 f b A f t \054 0 3904 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 650 DATA(insert OID = 3906 ( numrange PGNSP PGUID -1 f r R f t \054 0 0 3907 range_in range_out range_recv range_send - - range_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 651 DESCR("range of numerics"); 652 DATA(insert OID = 3907 ( _numrange PGNSP PGUID -1 f b A f t \054 0 3906 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 653 DATA(insert OID = 3908 ( tsrange PGNSP PGUID -1 f r R f t \054 0 0 3909 range_in range_out range_recv range_send - - range_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 654 DESCR("range of timestamps without time zone"); 655 DATA(insert OID = 3909 ( _tsrange PGNSP PGUID -1 f b A f t \054 0 3908 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 656 DATA(insert OID = 3910 ( tstzrange PGNSP PGUID -1 f r R f t \054 0 0 3911 range_in range_out range_recv range_send - - range_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 657 DESCR("range of timestamps with time zone"); 658 DATA(insert OID = 3911 ( _tstzrange PGNSP PGUID -1 f b A f t \054 0 3910 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 659 DATA(insert OID = 3912 ( daterange PGNSP PGUID -1 f r R f t \054 0 0 3913 range_in range_out range_recv range_send - - range_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 660 DESCR("range of dates"); 661 DATA(insert OID = 3913 ( _daterange PGNSP PGUID -1 f b A f t \054 0 3912 0 array_in array_out array_recv array_send - - array_typanalyze i x f 0 -1 0 0 _null_ _null_ _null_ )); 662 DATA(insert OID = 3926 ( int8range PGNSP PGUID -1 f r R f t \054 0 0 3927 range_in range_out range_recv range_send - - range_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 663 DESCR("range of bigints"); 664 DATA(insert OID = 3927 ( _int8range PGNSP PGUID -1 f b A f t \054 0 3926 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 665 666 /* 667 * pseudo-types 668 * 669 * types with typtype='p' represent various special cases in the type system. 670 * 671 * These cannot be used to define table columns, but are valid as function 672 * argument and result types (if supported by the function's implementation 673 * language). 674 * 675 * Note: cstring is a borderline case; it is still considered a pseudo-type, 676 * but there is now support for it in records and arrays. Perhaps we should 677 * just treat it as a regular base type? 678 */ 679 DATA(insert OID = 2249 ( record PGNSP PGUID -1 f p P f t \054 0 0 2287 record_in record_out record_recv record_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 680 #define RECORDOID 2249 681 DATA(insert OID = 2287 ( _record PGNSP PGUID -1 f p P f t \054 0 2249 0 array_in array_out array_recv array_send - - array_typanalyze d x f 0 -1 0 0 _null_ _null_ _null_ )); 682 #define RECORDARRAYOID 2287 683 DATA(insert OID = 2275 ( cstring PGNSP PGUID -2 f p P f t \054 0 0 1263 cstring_in cstring_out cstring_recv cstring_send - - - c p f 0 -1 0 0 _null_ _null_ _null_ )); 684 #define CSTRINGOID 2275 685 DATA(insert OID = 2276 ( any PGNSP PGUID 4 t p P f t \054 0 0 0 any_in any_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 686 #define ANYOID 2276 687 DATA(insert OID = 2277 ( anyarray PGNSP PGUID -1 f p P f t \054 0 0 0 anyarray_in anyarray_out anyarray_recv anyarray_send - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 688 #define ANYARRAYOID 2277 689 DATA(insert OID = 2278 ( void PGNSP PGUID 4 t p P f t \054 0 0 0 void_in void_out void_recv void_send - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 690 #define VOIDOID 2278 691 DATA(insert OID = 2279 ( trigger PGNSP PGUID 4 t p P f t \054 0 0 0 trigger_in trigger_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 692 #define TRIGGEROID 2279 693 DATA(insert OID = 3838 ( event_trigger PGNSP PGUID 4 t p P f t \054 0 0 0 event_trigger_in event_trigger_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 694 #define EVTTRIGGEROID 3838 695 DATA(insert OID = 2280 ( language_handler PGNSP PGUID 4 t p P f t \054 0 0 0 language_handler_in language_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 696 #define LANGUAGE_HANDLEROID 2280 697 DATA(insert OID = 2281 ( internal PGNSP PGUID SIZEOF_POINTER t p P f t \054 0 0 0 internal_in internal_out - - - - - ALIGNOF_POINTER p f 0 -1 0 0 _null_ _null_ _null_ )); 698 #define INTERNALOID 2281 699 DATA(insert OID = 2282 ( opaque PGNSP PGUID 4 t p P f t \054 0 0 0 opaque_in opaque_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 700 #define OPAQUEOID 2282 701 DATA(insert OID = 2283 ( anyelement PGNSP PGUID 4 t p P f t \054 0 0 0 anyelement_in anyelement_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 702 #define ANYELEMENTOID 2283 703 DATA(insert OID = 2776 ( anynonarray PGNSP PGUID 4 t p P f t \054 0 0 0 anynonarray_in anynonarray_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 704 #define ANYNONARRAYOID 2776 705 DATA(insert OID = 3500 ( anyenum PGNSP PGUID 4 t p P f t \054 0 0 0 anyenum_in anyenum_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 706 #define ANYENUMOID 3500 707 DATA(insert OID = 3115 ( fdw_handler PGNSP PGUID 4 t p P f t \054 0 0 0 fdw_handler_in fdw_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 708 #define FDW_HANDLEROID 3115 709 DATA(insert OID = 325 ( index_am_handler PGNSP PGUID 4 t p P f t \054 0 0 0 index_am_handler_in index_am_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 710 #define INDEX_AM_HANDLEROID 325 711 DATA(insert OID = 3310 ( tsm_handler PGNSP PGUID 4 t p P f t \054 0 0 0 tsm_handler_in tsm_handler_out - - - - - i p f 0 -1 0 0 _null_ _null_ _null_ )); 712 #define TSM_HANDLEROID 3310 713 DATA(insert OID = 3831 ( anyrange PGNSP PGUID -1 f p P f t \054 0 0 0 anyrange_in anyrange_out - - - - - d x f 0 -1 0 0 _null_ _null_ _null_ )); 714 #define ANYRANGEOID 3831 715 716 717 /* 718 * macros 719 */ 720 #define TYPTYPE_BASE 'b' /* base type (ordinary scalar type) */ 721 #define TYPTYPE_COMPOSITE 'c' /* composite (e.g., table's rowtype) */ 722 #define TYPTYPE_DOMAIN 'd' /* domain over another type */ 723 #define TYPTYPE_ENUM 'e' /* enumerated type */ 724 #define TYPTYPE_PSEUDO 'p' /* pseudo-type */ 725 #define TYPTYPE_RANGE 'r' /* range type */ 726 727 #define TYPCATEGORY_INVALID '\0' /* not an allowed category */ 728 #define TYPCATEGORY_ARRAY 'A' 729 #define TYPCATEGORY_BOOLEAN 'B' 730 #define TYPCATEGORY_COMPOSITE 'C' 731 #define TYPCATEGORY_DATETIME 'D' 732 #define TYPCATEGORY_ENUM 'E' 733 #define TYPCATEGORY_GEOMETRIC 'G' 734 #define TYPCATEGORY_NETWORK 'I' /* think INET */ 735 #define TYPCATEGORY_NUMERIC 'N' 736 #define TYPCATEGORY_PSEUDOTYPE 'P' 737 #define TYPCATEGORY_RANGE 'R' 738 #define TYPCATEGORY_STRING 'S' 739 #define TYPCATEGORY_TIMESPAN 'T' 740 #define TYPCATEGORY_USER 'U' 741 #define TYPCATEGORY_BITSTRING 'V' /* er ... "varbit"? */ 742 #define TYPCATEGORY_UNKNOWN 'X' 743 744 /* Is a type OID a polymorphic pseudotype? (Beware of multiple evaluation) */ 745 #define IsPolymorphicType(typid) \ 746 ((typid) == ANYELEMENTOID || \ 747 (typid) == ANYARRAYOID || \ 748 (typid) == ANYNONARRAYOID || \ 749 (typid) == ANYENUMOID || \ 750 (typid) == ANYRANGEOID) 751 752 #endif /* PG_TYPE_H */ 753