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-2016, 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 = 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_ ));
368 DESCR("internal type for passing CollectedCommand");
369 #define PGDDLCOMMANDOID 32
370 
371 /* OIDS 200 - 299 */
372 
373 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_ ));
374 DESCR("storage manager");
375 
376 /* OIDS 300 - 399 */
377 
378 /* OIDS 400 - 499 */
379 
380 /* OIDS 500 - 599 */
381 
382 /* OIDS 600 - 699 */
383 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_ ));
384 DESCR("geometric point '(x, y)'");
385 #define POINTOID		600
386 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_ ));
387 DESCR("geometric line segment '(pt1,pt2)'");
388 #define LSEGOID			601
389 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_ ));
390 DESCR("geometric path '(pt1,...)'");
391 #define PATHOID			602
392 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_ ));
393 DESCR("geometric box '(lower left,upper right)'");
394 #define BOXOID			603
395 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_ ));
396 DESCR("geometric polygon '(pt1,...)'");
397 #define POLYGONOID		604
398 
399 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_ ));
400 DESCR("geometric line");
401 #define LINEOID			628
402 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_ ));
403 
404 /* OIDS 700 - 799 */
405 
406 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_ ));
407 DESCR("single-precision floating point number, 4-byte storage");
408 #define FLOAT4OID 700
409 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_ ));
410 DESCR("double-precision floating point number, 8-byte storage");
411 #define FLOAT8OID 701
412 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_ ));
413 DESCR("absolute, limited-range date and time (Unix system time)");
414 #define ABSTIMEOID		702
415 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_ ));
416 DESCR("relative, limited-range time interval (Unix delta time)");
417 #define RELTIMEOID		703
418 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_ ));
419 DESCR("(abstime,abstime), time interval");
420 #define TINTERVALOID	704
421 DATA(insert OID = 705 (  unknown   PGNSP PGUID -2 f b X f t \054 0	 0 0 unknownin unknownout unknownrecv unknownsend - - - c p f 0 -1 0 0 _null_ _null_ _null_ ));
422 DESCR("");
423 #define UNKNOWNOID		705
424 
425 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_ ));
426 DESCR("geometric circle '(center,radius)'");
427 #define CIRCLEOID		718
428 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_ ));
429 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_ ));
430 DESCR("monetary amounts, $d,ddd.cc");
431 #define CASHOID 790
432 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_ ));
433 
434 /* OIDS 800 - 899 */
435 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_ ));
436 DESCR("XX:XX:XX:XX:XX:XX, MAC address");
437 #define MACADDROID 829
438 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_ ));
439 DESCR("IP address/netmask, host address, netmask optional");
440 #define INETOID 869
441 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_ ));
442 DESCR("network IP address/netmask, network address");
443 #define CIDROID 650
444 
445 /* OIDS 900 - 999 */
446 
447 /* OIDS 1000 - 1099 */
448 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_ ));
449 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_ ));
450 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_ ));
451 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_ ));
452 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_ ));
453 #define INT2ARRAYOID		1005
454 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_ ));
455 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_ ));
456 #define INT4ARRAYOID		1007
457 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_ ));
458 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_ ));
459 #define TEXTARRAYOID		1009
460 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_ ));
461 #define OIDARRAYOID			1028
462 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_ ));
463 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_ ));
464 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_ ));
465 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_ ));
466 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_ ));
467 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_ ));
468 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_ ));
469 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_ ));
470 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_ ));
471 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_ ));
472 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_ ));
473 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_ ));
474 #define FLOAT4ARRAYOID 1021
475 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_ ));
476 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_ ));
477 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_ ));
478 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_ ));
479 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_ ));
480 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_ ));
481 DESCR("access control list");
482 #define ACLITEMOID		1033
483 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_ ));
484 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_ ));
485 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_ ));
486 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_ ));
487 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_ ));
488 #define CSTRINGARRAYOID		1263
489 
490 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_ ));
491 DESCR("char(length), blank-padded string, fixed storage length");
492 #define BPCHAROID		1042
493 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_ ));
494 DESCR("varchar(length), non-blank-padded string, variable storage length");
495 #define VARCHAROID		1043
496 
497 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_ ));
498 DESCR("date");
499 #define DATEOID			1082
500 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_ ));
501 DESCR("time of day");
502 #define TIMEOID			1083
503 
504 /* OIDS 1100 - 1199 */
505 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_ ));
506 DESCR("date and time");
507 #define TIMESTAMPOID	1114
508 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_ ));
509 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_ ));
510 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_ ));
511 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_ ));
512 DESCR("date and time with time zone");
513 #define TIMESTAMPTZOID	1184
514 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_ ));
515 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_ ));
516 DESCR("@ <number> <units>, time interval");
517 #define INTERVALOID		1186
518 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_ ));
519 
520 /* OIDS 1200 - 1299 */
521 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_ ));
522 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_ ));
523 DESCR("time of day with time zone");
524 #define TIMETZOID		1266
525 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_ ));
526 
527 /* OIDS 1500 - 1599 */
528 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_ ));
529 DESCR("fixed-length bit string");
530 #define BITOID	 1560
531 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_ ));
532 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_ ));
533 DESCR("variable-length bit string");
534 #define VARBITOID	  1562
535 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_ ));
536 
537 /* OIDS 1600 - 1699 */
538 
539 /* OIDS 1700 - 1799 */
540 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_ ));
541 DESCR("numeric(precision, decimal), arbitrary precision number");
542 #define NUMERICOID		1700
543 
544 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_ ));
545 DESCR("reference to cursor (portal name)");
546 #define REFCURSOROID	1790
547 
548 /* OIDS 2200 - 2299 */
549 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_ ));
550 
551 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_ ));
552 DESCR("registered procedure (with args)");
553 #define REGPROCEDUREOID 2202
554 
555 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_ ));
556 DESCR("registered operator");
557 #define REGOPEROID		2203
558 
559 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_ ));
560 DESCR("registered operator (with args)");
561 #define REGOPERATOROID	2204
562 
563 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_ ));
564 DESCR("registered class");
565 #define REGCLASSOID		2205
566 
567 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_ ));
568 DESCR("registered type");
569 #define REGTYPEOID		2206
570 
571 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_ ));
572 DESCR("registered role");
573 #define REGROLEOID		4096
574 
575 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_ ));
576 DESCR("registered namespace");
577 #define REGNAMESPACEOID		4089
578 
579 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_ ));
580 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_ ));
581 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_ ));
582 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_ ));
583 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_ ));
584 #define REGTYPEARRAYOID 2211
585 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_ ));
586 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_ ));
587 
588 /* uuid */
589 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_ ));
590 DESCR("UUID datatype");
591 #define UUIDOID 2950
592 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_ ));
593 
594 /* pg_lsn */
595 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_ ));
596 DESCR("PostgreSQL LSN datatype");
597 #define LSNOID			3220
598 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_ ));
599 
600 /* text search */
601 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_ ));
602 DESCR("text representation for text search");
603 #define TSVECTOROID		3614
604 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_ ));
605 DESCR("GiST index internal text representation for text search");
606 #define GTSVECTOROID	3642
607 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_ ));
608 DESCR("query representation for text search");
609 #define TSQUERYOID		3615
610 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_ ));
611 DESCR("registered text search configuration");
612 #define REGCONFIGOID	3734
613 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_ ));
614 DESCR("registered text search dictionary");
615 #define REGDICTIONARYOID	3769
616 
617 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_ ));
618 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_ ));
619 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_ ));
620 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_ ));
621 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_ ));
622 
623 /* jsonb */
624 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_ ));
625 DESCR("Binary JSON");
626 #define JSONBOID 3802
627 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_ ));
628 
629 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_ ));
630 DESCR("txid snapshot");
631 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_ ));
632 
633 /* range types */
634 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_ ));
635 DESCR("range of integers");
636 #define INT4RANGEOID		3904
637 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_ ));
638 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_ ));
639 DESCR("range of numerics");
640 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_ ));
641 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_ ));
642 DESCR("range of timestamps without time zone");
643 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_ ));
644 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_ ));
645 DESCR("range of timestamps with time zone");
646 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_ ));
647 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_ ));
648 DESCR("range of dates");
649 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_ ));
650 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_ ));
651 DESCR("range of bigints");
652 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_ ));
653 
654 /*
655  * pseudo-types
656  *
657  * types with typtype='p' represent various special cases in the type system.
658  *
659  * These cannot be used to define table columns, but are valid as function
660  * argument and result types (if supported by the function's implementation
661  * language).
662  *
663  * Note: cstring is a borderline case; it is still considered a pseudo-type,
664  * but there is now support for it in records and arrays.  Perhaps we should
665  * just treat it as a regular base type?
666  */
667 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_ ));
668 #define RECORDOID		2249
669 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_ ));
670 #define RECORDARRAYOID	2287
671 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_ ));
672 #define CSTRINGOID		2275
673 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_ ));
674 #define ANYOID			2276
675 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_ ));
676 #define ANYARRAYOID		2277
677 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_ ));
678 #define VOIDOID			2278
679 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_ ));
680 #define TRIGGEROID		2279
681 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_ ));
682 #define EVTTRIGGEROID		3838
683 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_ ));
684 #define LANGUAGE_HANDLEROID		2280
685 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_ ));
686 #define INTERNALOID		2281
687 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_ ));
688 #define OPAQUEOID		2282
689 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_ ));
690 #define ANYELEMENTOID	2283
691 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_ ));
692 #define ANYNONARRAYOID	2776
693 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_ ));
694 #define ANYENUMOID		3500
695 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_ ));
696 #define FDW_HANDLEROID	3115
697 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_ ));
698 #define INDEX_AM_HANDLEROID 325
699 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_ ));
700 #define TSM_HANDLEROID	3310
701 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_ ));
702 #define ANYRANGEOID		3831
703 
704 
705 /*
706  * macros
707  */
708 #define  TYPTYPE_BASE		'b' /* base type (ordinary scalar type) */
709 #define  TYPTYPE_COMPOSITE	'c' /* composite (e.g., table's rowtype) */
710 #define  TYPTYPE_DOMAIN		'd' /* domain over another type */
711 #define  TYPTYPE_ENUM		'e' /* enumerated type */
712 #define  TYPTYPE_PSEUDO		'p' /* pseudo-type */
713 #define  TYPTYPE_RANGE		'r' /* range type */
714 
715 #define  TYPCATEGORY_INVALID	'\0'	/* not an allowed category */
716 #define  TYPCATEGORY_ARRAY		'A'
717 #define  TYPCATEGORY_BOOLEAN	'B'
718 #define  TYPCATEGORY_COMPOSITE	'C'
719 #define  TYPCATEGORY_DATETIME	'D'
720 #define  TYPCATEGORY_ENUM		'E'
721 #define  TYPCATEGORY_GEOMETRIC	'G'
722 #define  TYPCATEGORY_NETWORK	'I'		/* think INET */
723 #define  TYPCATEGORY_NUMERIC	'N'
724 #define  TYPCATEGORY_PSEUDOTYPE 'P'
725 #define  TYPCATEGORY_RANGE		'R'
726 #define  TYPCATEGORY_STRING		'S'
727 #define  TYPCATEGORY_TIMESPAN	'T'
728 #define  TYPCATEGORY_USER		'U'
729 #define  TYPCATEGORY_BITSTRING	'V'		/* er ... "varbit"? */
730 #define  TYPCATEGORY_UNKNOWN	'X'
731 
732 /* Is a type OID a polymorphic pseudotype?	(Beware of multiple evaluation) */
733 #define IsPolymorphicType(typid)  \
734 	((typid) == ANYELEMENTOID || \
735 	 (typid) == ANYARRAYOID || \
736 	 (typid) == ANYNONARRAYOID || \
737 	 (typid) == ANYENUMOID || \
738 	 (typid) == ANYRANGEOID)
739 
740 #endif   /* PG_TYPE_H */
741