1 /*-------------------------------------------------------------------------
4 * definition of the system "attribute" relation (pg_attribute)
5 * along with the relation's initial contents.
8 * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
9 * Portions Copyright (c) 1994, Regents of the University of California
11 * $Id: pg_attribute.h,v 1.79 2001/11/05 17:46:32 momjian Exp $
14 * the genbki.sh script reads this file and generates .bki
15 * information from the DATA() statements.
17 * utils/cache/relcache.c requires hard-coded tuple descriptors
18 * for some of the system catalogs. So if the schema for any of
19 * these changes, be sure and change the appropriate Schema_xxx
22 *-------------------------------------------------------------------------
24 #ifndef PG_ATTRIBUTE_H
25 #define PG_ATTRIBUTE_H
28 * postgres.h contains the system type definintions and the
29 * CATALOG(), BOOTSTRAP and DATA() sugar words so this file
30 * can be read by both genbki.sh and the C compiler.
35 * pg_attribute definition. cpp turns this into
36 * typedef struct FormData_pg_attribute
38 * If you change the following, make sure you change the structs for
39 * system attributes in catalog/heap.c also.
42 CATALOG(pg_attribute) BOOTSTRAP BKI_WITHOUT_OIDS
44 Oid attrelid; /* OID of relation containing this
46 NameData attname; /* name of attribute */
49 * atttypid is the OID of the instance in Catalog Class pg_type that
50 * defines the data type of this attribute (e.g. int4). Information
51 * in that instance is redundant with the attlen, attbyval, and
52 * attalign attributes of this instance, so they had better match or
58 * attstattarget is the target number of statistics datapoints to
59 * collect during VACUUM ANALYZE of this column. A zero here
60 * indicates that we do not wish to collect any stats about this
66 * attlen is a copy of the typlen field from pg_type for this
67 * attribute. See atttypid comments above.
72 * attnum is the "attribute number" for the attribute: A value that
73 * uniquely identifies this attribute within its class. For user
74 * attributes, Attribute numbers are greater than 0 and not greater
75 * than the number of attributes in the class. I.e. if the Class
76 * pg_class says that Class XYZ has 10 attributes, then the user
77 * attribute numbers in Class pg_attribute must be 1-10.
79 * System attributes have attribute numbers less than 0 that are unique
80 * within the class, but not constrained to any particular range.
82 * Note that (attnum - 1) is often used as the index to an array.
87 * attndims is the declared number of dimensions, if an array type,
93 * fastgetattr() uses attcacheoff to cache byte offsets of attributes
94 * in heap tuples. The value actually stored in pg_attribute (-1)
95 * indicates no cached value. But when we copy these tuples into a
96 * tuple descriptor, we may then update attcacheoff in the copies.
97 * This speeds up the attribute walking process.
102 * atttypmod records type-specific data supplied at table creation
103 * time (for example, the max length of a varchar field). It is
104 * passed to type-specific input and output functions as the third
105 * argument. The value will generally be -1 for types that do not need
111 * attbyval is a copy of the typbyval field from pg_type for this
112 * attribute. See atttypid comments above.
117 * attstorage tells for VARLENA attributes, what the heap access
118 * methods can do to it if a given tuple doesn't fit into a page.
119 * Possible values are
120 * 'p': Value must be stored plain always
121 * 'e': Value can be stored in "secondary" relation (if relation
122 * has one, see pg_class.reltoastrelid)
123 * 'm': Value can be stored compressed inline
124 * 'x': Value can be stored compressed inline or in "secondary"
125 * Note that 'm' fields can also be moved out to secondary storage,
126 * but only as a last resort ('e' and 'x' fields are moved first).
131 /* This flag indicates that the attribute is really a set */
135 * attalign is a copy of the typalign field from pg_type for this
136 * attribute. See atttypid comments above.
140 /* This flag represents the "NOT NULL" constraint */
143 /* Has DEFAULT value or not */
145 } FormData_pg_attribute;
148 * someone should figure out how to do this properly. (The problem is
149 * the size of the C struct is not the same as the size of the tuple
150 * because of alignment padding at the end of the struct.)
152 #define ATTRIBUTE_TUPLE_SIZE \
153 (offsetof(FormData_pg_attribute,atthasdef) + sizeof(bool))
156 * Form_pg_attribute corresponds to a pointer to a tuple with
157 * the format of pg_attribute relation.
160 typedef FormData_pg_attribute *Form_pg_attribute;
163 * compiler constants for pg_attribute
167 #define Natts_pg_attribute 15
168 #define Anum_pg_attribute_attrelid 1
169 #define Anum_pg_attribute_attname 2
170 #define Anum_pg_attribute_atttypid 3
171 #define Anum_pg_attribute_attstattarget 4
172 #define Anum_pg_attribute_attlen 5
173 #define Anum_pg_attribute_attnum 6
174 #define Anum_pg_attribute_attndims 7
175 #define Anum_pg_attribute_attcacheoff 8
176 #define Anum_pg_attribute_atttypmod 9
177 #define Anum_pg_attribute_attbyval 10
178 #define Anum_pg_attribute_attstorage 11
179 #define Anum_pg_attribute_attisset 12
180 #define Anum_pg_attribute_attalign 13
181 #define Anum_pg_attribute_attnotnull 14
182 #define Anum_pg_attribute_atthasdef 15
185 #ifdef _DROP_COLUMN_HACK__
187 * CONSTANT and MACROS for DROP COLUMN implementation
189 #define DROP_COLUMN_OFFSET -20
190 #define COLUMN_IS_DROPPED(attribute) ((attribute)->attnum <= DROP_COLUMN_OFFSET)
191 #define DROPPED_COLUMN_INDEX(attidx) (DROP_COLUMN_OFFSET - attidx)
192 #define ATTRIBUTE_DROP_COLUMN(attribute) \
193 Assert((attribute)->attnum > 0); \
194 (attribute)->attnum = DROPPED_COLUMN_INDEX((attribute)->attnum); \
195 (attribute)->atttypid = (Oid) -1; \
196 (attribute)->attnotnull = false; \
197 (attribute)->atthasdef = false;
198 #endif /* _DROP_COLUMN_HACK__ */
201 * SCHEMA_ macros for declaring hardcoded tuple descriptors.
202 * these are used in utils/cache/relcache.c
204 #define SCHEMA_NAME(x) CppConcat(Name_,x)
205 #define SCHEMA_DESC(x) CppConcat(Desc_,x)
206 #define SCHEMA_NATTS(x) CppConcat(Natts_,x)
207 #define SCHEMA_DEF(x) \
208 FormData_pg_attribute \
209 SCHEMA_DESC(x) [ SCHEMA_NATTS(x) ] = \
211 CppConcat(Schema_,x) \
216 * initial contents of pg_attribute
218 * NOTE: only "bootstrapped" relations need to be declared here.
226 #define Schema_pg_type \
227 { 1247, {"typname"}, 19, DEFAULT_ATTSTATTARGET, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', false, false }, \
228 { 1247, {"typowner"}, 23, 0, 4, 2, 0, -1, -1, true, 'p', false, 'i', false, false }, \
229 { 1247, {"typlen"}, 21, 0, 2, 3, 0, -1, -1, true, 'p', false, 's', false, false }, \
230 { 1247, {"typprtlen"}, 21, 0, 2, 4, 0, -1, -1, true, 'p', false, 's', false, false }, \
231 { 1247, {"typbyval"}, 16, 0, 1, 5, 0, -1, -1, true, 'p', false, 'c', false, false }, \
232 { 1247, {"typtype"}, 18, 0, 1, 6, 0, -1, -1, true, 'p', false, 'c', false, false }, \
233 { 1247, {"typisdefined"}, 16, 0, 1, 7, 0, -1, -1, true, 'p', false, 'c', false, false }, \
234 { 1247, {"typdelim"}, 18, 0, 1, 8, 0, -1, -1, true, 'p', false, 'c', false, false }, \
235 { 1247, {"typrelid"}, 26, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', false, false }, \
236 { 1247, {"typelem"}, 26, 0, 4, 10, 0, -1, -1, true, 'p', false, 'i', false, false }, \
237 { 1247, {"typinput"}, 24, 0, 4, 11, 0, -1, -1, true, 'p', false, 'i', false, false }, \
238 { 1247, {"typoutput"}, 24, 0, 4, 12, 0, -1, -1, true, 'p', false, 'i', false, false }, \
239 { 1247, {"typreceive"}, 24, 0, 4, 13, 0, -1, -1, true, 'p', false, 'i', false, false }, \
240 { 1247, {"typsend"}, 24, 0, 4, 14, 0, -1, -1, true, 'p', false, 'i', false, false }, \
241 { 1247, {"typalign"}, 18, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', false, false }, \
242 { 1247, {"typstorage"}, 18, 0, 1, 16, 0, -1, -1, true, 'p', false, 'c', false, false }, \
243 { 1247, {"typdefault"}, 25, 0, -1, 17, 0, -1, -1, false , 'x', false, 'i', false, false }
245 DATA(insert ( 1247 typname 19 DEFAULT_ATTSTATTARGET NAMEDATALEN 1 0 -1 -1 f p f i f f));
246 DATA(insert ( 1247 typowner 23 0 4 2 0 -1 -1 t p f i f f));
247 DATA(insert ( 1247 typlen 21 0 2 3 0 -1 -1 t p f s f f));
248 DATA(insert ( 1247 typprtlen 21 0 2 4 0 -1 -1 t p f s f f));
249 DATA(insert ( 1247 typbyval 16 0 1 5 0 -1 -1 t p f c f f));
250 DATA(insert ( 1247 typtype 18 0 1 6 0 -1 -1 t p f c f f));
251 DATA(insert ( 1247 typisdefined 16 0 1 7 0 -1 -1 t p f c f f));
252 DATA(insert ( 1247 typdelim 18 0 1 8 0 -1 -1 t p f c f f));
253 DATA(insert ( 1247 typrelid 26 0 4 9 0 -1 -1 t p f i f f));
254 DATA(insert ( 1247 typelem 26 0 4 10 0 -1 -1 t p f i f f));
255 DATA(insert ( 1247 typinput 24 0 4 11 0 -1 -1 t p f i f f));
256 DATA(insert ( 1247 typoutput 24 0 4 12 0 -1 -1 t p f i f f));
257 DATA(insert ( 1247 typreceive 24 0 4 13 0 -1 -1 t p f i f f));
258 DATA(insert ( 1247 typsend 24 0 4 14 0 -1 -1 t p f i f f));
259 DATA(insert ( 1247 typalign 18 0 1 15 0 -1 -1 t p f c f f));
260 DATA(insert ( 1247 typstorage 18 0 1 16 0 -1 -1 t p f c f f));
261 DATA(insert ( 1247 typdefault 25 0 -1 17 0 -1 -1 f x f i f f));
262 DATA(insert ( 1247 ctid 27 0 6 -1 0 -1 -1 f p f i f f));
263 DATA(insert ( 1247 oid 26 0 4 -2 0 -1 -1 t p f i f f));
264 DATA(insert ( 1247 xmin 28 0 4 -3 0 -1 -1 t p f i f f));
265 DATA(insert ( 1247 cmin 29 0 4 -4 0 -1 -1 t p f i f f));
266 DATA(insert ( 1247 xmax 28 0 4 -5 0 -1 -1 t p f i f f));
267 DATA(insert ( 1247 cmax 29 0 4 -6 0 -1 -1 t p f i f f));
268 DATA(insert ( 1247 tableoid 26 0 4 -7 0 -1 -1 t p f i f f));
274 DATA(insert ( 1262 datname 19 0 NAMEDATALEN 1 0 -1 -1 f p f i f f));
275 DATA(insert ( 1262 datdba 23 0 4 2 0 -1 -1 t p f i f f));
276 DATA(insert ( 1262 encoding 23 0 4 3 0 -1 -1 t p f i f f));
277 DATA(insert ( 1262 datistemplate 16 0 1 4 0 -1 -1 t p f c f f));
278 DATA(insert ( 1262 datallowconn 16 0 1 5 0 -1 -1 t p f c f f));
279 DATA(insert ( 1262 datlastsysoid 26 0 4 6 0 -1 -1 t p f i f f));
280 DATA(insert ( 1262 datvacuumxid 28 0 4 7 0 -1 -1 t p f i f f));
281 DATA(insert ( 1262 datfrozenxid 28 0 4 8 0 -1 -1 t p f i f f));
282 /* do not mark datpath as toastable; GetRawDatabaseInfo won't cope */
283 DATA(insert ( 1262 datpath 25 0 -1 9 0 -1 -1 f p f i f f));
284 DATA(insert ( 1262 ctid 27 0 6 -1 0 -1 -1 f p f i f f));
285 DATA(insert ( 1262 oid 26 0 4 -2 0 -1 -1 t p f i f f));
286 DATA(insert ( 1262 xmin 28 0 4 -3 0 -1 -1 t p f i f f));
287 DATA(insert ( 1262 cmin 29 0 4 -4 0 -1 -1 t p f i f f));
288 DATA(insert ( 1262 xmax 28 0 4 -5 0 -1 -1 t p f i f f));
289 DATA(insert ( 1262 cmax 29 0 4 -6 0 -1 -1 t p f i f f));
290 DATA(insert ( 1262 tableoid 26 0 4 -7 0 -1 -1 t p f i f f));
296 #define Schema_pg_proc \
297 { 1255, {"proname"}, 19, DEFAULT_ATTSTATTARGET, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', false, false }, \
298 { 1255, {"proowner"}, 23, 0, 4, 2, 0, -1, -1, true, 'p', false, 'i', false, false }, \
299 { 1255, {"prolang"}, 26, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', false, false }, \
300 { 1255, {"proisinh"}, 16, 0, 1, 4, 0, -1, -1, true, 'p', false, 'c', false, false }, \
301 { 1255, {"proistrusted"}, 16, 0, 1, 5, 0, -1, -1, true, 'p', false, 'c', false, false }, \
302 { 1255, {"proiscachable"}, 16, 0, 1, 6, 0, -1, -1, true, 'p', false, 'c', false, false }, \
303 { 1255, {"proisstrict"}, 16, 0, 1, 7, 0, -1, -1, true, 'p', false, 'c', false, false }, \
304 { 1255, {"pronargs"}, 21, 0, 2, 8, 0, -1, -1, true, 'p', false, 's', false, false }, \
305 { 1255, {"proretset"}, 16, 0, 1, 9, 0, -1, -1, true, 'p', false, 'c', false, false }, \
306 { 1255, {"prorettype"}, 26, 0, 4, 10, 0, -1, -1, true, 'p', false, 'i', false, false }, \
307 { 1255, {"proargtypes"}, 30, 0, INDEX_MAX_KEYS*4, 11, 0, -1, -1, false, 'p', false, 'i', false, false }, \
308 { 1255, {"probyte_pct"}, 23, 0, 4, 12, 0, -1, -1, true, 'p', false, 'i', false, false }, \
309 { 1255, {"properbyte_cpu"}, 23, 0, 4, 13, 0, -1, -1, true, 'p', false, 'i', false, false }, \
310 { 1255, {"propercall_cpu"}, 23, 0, 4, 14, 0, -1, -1, true, 'p', false, 'i', false, false }, \
311 { 1255, {"prooutin_ratio"}, 23, 0, 4, 15, 0, -1, -1, true, 'p', false, 'i', false, false }, \
312 { 1255, {"prosrc"}, 25, 0, -1, 16, 0, -1, -1, false, 'x', false, 'i', false, false }, \
313 { 1255, {"probin"}, 17, 0, -1, 17, 0, -1, -1, false, 'x', false, 'i', false, false }
315 DATA(insert ( 1255 proname 19 DEFAULT_ATTSTATTARGET NAMEDATALEN 1 0 -1 -1 f p f i f f));
316 DATA(insert ( 1255 proowner 23 0 4 2 0 -1 -1 t p f i f f));
317 DATA(insert ( 1255 prolang 26 0 4 3 0 -1 -1 t p f i f f));
318 DATA(insert ( 1255 proisinh 16 0 1 4 0 -1 -1 t p f c f f));
319 DATA(insert ( 1255 proistrusted 16 0 1 5 0 -1 -1 t p f c f f));
320 DATA(insert ( 1255 proiscachable 16 0 1 6 0 -1 -1 t p f c f f));
321 DATA(insert ( 1255 proisstrict 16 0 1 7 0 -1 -1 t p f c f f));
322 DATA(insert ( 1255 pronargs 21 0 2 8 0 -1 -1 t p f s f f));
323 DATA(insert ( 1255 proretset 16 0 1 9 0 -1 -1 t p f c f f));
324 DATA(insert ( 1255 prorettype 26 0 4 10 0 -1 -1 t p f i f f));
325 DATA(insert ( 1255 proargtypes 30 0 INDEX_MAX_KEYS*4 11 0 -1 -1 f p f i f f));
326 DATA(insert ( 1255 probyte_pct 23 0 4 12 0 -1 -1 t p f i f f));
327 DATA(insert ( 1255 properbyte_cpu 23 0 4 13 0 -1 -1 t p f i f f));
328 DATA(insert ( 1255 propercall_cpu 23 0 4 14 0 -1 -1 t p f i f f));
329 DATA(insert ( 1255 prooutin_ratio 23 0 4 15 0 -1 -1 t p f i f f));
330 DATA(insert ( 1255 prosrc 25 0 -1 16 0 -1 -1 f x f i f f));
331 DATA(insert ( 1255 probin 17 0 -1 17 0 -1 -1 f x f i f f));
332 DATA(insert ( 1255 ctid 27 0 6 -1 0 -1 -1 f p f i f f));
333 DATA(insert ( 1255 oid 26 0 4 -2 0 -1 -1 t p f i f f));
334 DATA(insert ( 1255 xmin 28 0 4 -3 0 -1 -1 t p f i f f));
335 DATA(insert ( 1255 cmin 29 0 4 -4 0 -1 -1 t p f i f f));
336 DATA(insert ( 1255 xmax 28 0 4 -5 0 -1 -1 t p f i f f));
337 DATA(insert ( 1255 cmax 29 0 4 -6 0 -1 -1 t p f i f f));
338 DATA(insert ( 1255 tableoid 26 0 4 -7 0 -1 -1 t p f i f f));
344 DATA(insert ( 1260 usename 19 DEFAULT_ATTSTATTARGET NAMEDATALEN 1 0 -1 -1 f p f i f f));
345 DATA(insert ( 1260 usesysid 23 DEFAULT_ATTSTATTARGET 4 2 0 -1 -1 t p f i f f));
346 DATA(insert ( 1260 usecreatedb 16 0 1 3 0 -1 -1 t p f c f f));
347 DATA(insert ( 1260 usetrace 16 0 1 4 0 -1 -1 t p f c f f));
348 DATA(insert ( 1260 usesuper 16 0 1 5 0 -1 -1 t p f c f f));
349 DATA(insert ( 1260 usecatupd 16 0 1 6 0 -1 -1 t p f c f f));
350 DATA(insert ( 1260 passwd 25 0 -1 7 0 -1 -1 f x f i f f));
351 DATA(insert ( 1260 valuntil 702 0 4 8 0 -1 -1 t p f i f f));
352 DATA(insert ( 1260 ctid 27 0 6 -1 0 -1 -1 f p f i f f));
353 /* no OIDs in pg_shadow */
354 DATA(insert ( 1260 xmin 28 0 4 -3 0 -1 -1 t p f i f f));
355 DATA(insert ( 1260 cmin 29 0 4 -4 0 -1 -1 t p f i f f));
356 DATA(insert ( 1260 xmax 28 0 4 -5 0 -1 -1 t p f i f f));
357 DATA(insert ( 1260 cmax 29 0 4 -6 0 -1 -1 t p f i f f));
358 DATA(insert ( 1260 tableoid 26 0 4 -7 0 -1 -1 t p f i f f));
364 DATA(insert ( 1261 groname 19 DEFAULT_ATTSTATTARGET NAMEDATALEN 1 0 -1 -1 f p f i f f));
365 DATA(insert ( 1261 grosysid 23 DEFAULT_ATTSTATTARGET 4 2 0 -1 -1 t p f i f f));
366 DATA(insert ( 1261 grolist 1007 0 -1 3 0 -1 -1 f x f i f f));
367 DATA(insert ( 1261 ctid 27 0 6 -1 0 -1 -1 f p f i f f));
368 /* no OIDs in pg_group */
369 DATA(insert ( 1261 xmin 28 0 4 -3 0 -1 -1 t p f i f f));
370 DATA(insert ( 1261 cmin 29 0 4 -4 0 -1 -1 t p f i f f));
371 DATA(insert ( 1261 xmax 28 0 4 -5 0 -1 -1 t p f i f f));
372 DATA(insert ( 1261 cmax 29 0 4 -6 0 -1 -1 t p f i f f));
373 DATA(insert ( 1261 tableoid 26 0 4 -7 0 -1 -1 t p f i f f));
379 #define Schema_pg_attribute \
380 { 1249, {"attrelid"}, 26, DEFAULT_ATTSTATTARGET, 4, 1, 0, -1, -1, true, 'p', false, 'i', false, false }, \
381 { 1249, {"attname"}, 19, DEFAULT_ATTSTATTARGET, NAMEDATALEN, 2, 0, -1, -1, false, 'p', false, 'i', false, false }, \
382 { 1249, {"atttypid"}, 26, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', false, false }, \
383 { 1249, {"attstattarget"}, 23, 0, 4, 4, 0, -1, -1, true, 'p', false, 'i', false, false }, \
384 { 1249, {"attlen"}, 21, 0, 2, 5, 0, -1, -1, true, 'p', false, 's', false, false }, \
385 { 1249, {"attnum"}, 21, 0, 2, 6, 0, -1, -1, true, 'p', false, 's', false, false }, \
386 { 1249, {"attndims"}, 23, 0, 4, 7, 0, -1, -1, true, 'p', false, 'i', false, false }, \
387 { 1249, {"attcacheoff"}, 23, 0, 4, 8, 0, -1, -1, true, 'p', false, 'i', false, false }, \
388 { 1249, {"atttypmod"}, 23, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', false, false }, \
389 { 1249, {"attbyval"}, 16, 0, 1, 10, 0, -1, -1, true, 'p', false, 'c', false, false }, \
390 { 1249, {"attstorage"}, 18, 0, 1, 11, 0, -1, -1, true, 'p', false, 'c', false, false }, \
391 { 1249, {"attisset"}, 16, 0, 1, 12, 0, -1, -1, true, 'p', false, 'c', false, false }, \
392 { 1249, {"attalign"}, 18, 0, 1, 13, 0, -1, -1, true, 'p', false, 'c', false, false }, \
393 { 1249, {"attnotnull"}, 16, 0, 1, 14, 0, -1, -1, true, 'p', false, 'c', false, false }, \
394 { 1249, {"atthasdef"}, 16, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', false, false }
396 DATA(insert ( 1249 attrelid 26 DEFAULT_ATTSTATTARGET 4 1 0 -1 -1 t p f i f f));
397 DATA(insert ( 1249 attname 19 DEFAULT_ATTSTATTARGET NAMEDATALEN 2 0 -1 -1 f p f i f f));
398 DATA(insert ( 1249 atttypid 26 0 4 3 0 -1 -1 t p f i f f));
399 DATA(insert ( 1249 attstattarget 23 0 4 4 0 -1 -1 t p f i f f));
400 DATA(insert ( 1249 attlen 21 0 2 5 0 -1 -1 t p f s f f));
401 DATA(insert ( 1249 attnum 21 0 2 6 0 -1 -1 t p f s f f));
402 DATA(insert ( 1249 attndims 23 0 4 7 0 -1 -1 t p f i f f));
403 DATA(insert ( 1249 attcacheoff 23 0 4 8 0 -1 -1 t p f i f f));
404 DATA(insert ( 1249 atttypmod 23 0 4 9 0 -1 -1 t p f i f f));
405 DATA(insert ( 1249 attbyval 16 0 1 10 0 -1 -1 t p f c f f));
406 DATA(insert ( 1249 attstorage 18 0 1 11 0 -1 -1 t p f c f f));
407 DATA(insert ( 1249 attisset 16 0 1 12 0 -1 -1 t p f c f f));
408 DATA(insert ( 1249 attalign 18 0 1 13 0 -1 -1 t p f c f f));
409 DATA(insert ( 1249 attnotnull 16 0 1 14 0 -1 -1 t p f c f f));
410 DATA(insert ( 1249 atthasdef 16 0 1 15 0 -1 -1 t p f c f f));
411 DATA(insert ( 1249 ctid 27 0 6 -1 0 -1 -1 f p f i f f));
412 /* no OIDs in pg_attribute */
413 DATA(insert ( 1249 xmin 28 0 4 -3 0 -1 -1 t p f i f f));
414 DATA(insert ( 1249 cmin 29 0 4 -4 0 -1 -1 t p f i f f));
415 DATA(insert ( 1249 xmax 28 0 4 -5 0 -1 -1 t p f i f f));
416 DATA(insert ( 1249 cmax 29 0 4 -6 0 -1 -1 t p f i f f));
417 DATA(insert ( 1249 tableoid 26 0 4 -7 0 -1 -1 t p f i f f));
423 #define Schema_pg_class \
424 { 1259, {"relname"}, 19, DEFAULT_ATTSTATTARGET, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', false, false }, \
425 { 1259, {"reltype"}, 26, 0, 4, 2, 0, -1, -1, true, 'p', false, 'i', false, false }, \
426 { 1259, {"relowner"}, 23, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', false, false }, \
427 { 1259, {"relam"}, 26, 0, 4, 4, 0, -1, -1, true, 'p', false, 'i', false, false }, \
428 { 1259, {"relfilenode"}, 26, 0, 4, 5, 0, -1, -1, true, 'p', false, 'i', false, false }, \
429 { 1259, {"relpages"}, 23, 0, 4, 6, 0, -1, -1, true, 'p', false, 'i', false, false }, \
430 { 1259, {"reltuples"}, 700, 0, 4, 7, 0, -1, -1, false, 'p', false, 'i', false, false }, \
431 { 1259, {"reltoastrelid"}, 26, 0, 4, 8, 0, -1, -1, true, 'p', false, 'i', false, false }, \
432 { 1259, {"reltoastidxid"}, 26, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', false, false }, \
433 { 1259, {"relhasindex"}, 16, 0, 1, 10, 0, -1, -1, true, 'p', false, 'c', false, false }, \
434 { 1259, {"relisshared"}, 16, 0, 1, 11, 0, -1, -1, true, 'p', false, 'c', false, false }, \
435 { 1259, {"relkind"}, 18, 0, 1, 12, 0, -1, -1, true, 'p', false, 'c', false, false }, \
436 { 1259, {"relnatts"}, 21, 0, 2, 13, 0, -1, -1, true, 'p', false, 's', false, false }, \
437 { 1259, {"relchecks"}, 21, 0, 2, 14, 0, -1, -1, true, 'p', false, 's', false, false }, \
438 { 1259, {"reltriggers"}, 21, 0, 2, 15, 0, -1, -1, true, 'p', false, 's', false, false }, \
439 { 1259, {"relukeys"}, 21, 0, 2, 16, 0, -1, -1, true, 'p', false, 's', false, false }, \
440 { 1259, {"relfkeys"}, 21, 0, 2, 17, 0, -1, -1, true, 'p', false, 's', false, false }, \
441 { 1259, {"relrefs"}, 21, 0, 2, 18, 0, -1, -1, true, 'p', false, 's', false, false }, \
442 { 1259, {"relhasoids"}, 16, 0, 1, 19, 0, -1, -1, true, 'p', false, 'c', false, false }, \
443 { 1259, {"relhaspkey"}, 16, 0, 1, 20, 0, -1, -1, true, 'p', false, 'c', false, false }, \
444 { 1259, {"relhasrules"}, 16, 0, 1, 21, 0, -1, -1, true, 'p', false, 'c', false, false }, \
445 { 1259, {"relhassubclass"},16, 0, 1, 22, 0, -1, -1, true, 'p', false, 'c', false, false }, \
446 { 1259, {"relacl"}, 1034, 0, -1, 23, 0, -1, -1, false, 'x', false, 'i', false, false }
448 DATA(insert ( 1259 relname 19 DEFAULT_ATTSTATTARGET NAMEDATALEN 1 0 -1 -1 f p f i f f));
449 DATA(insert ( 1259 reltype 26 0 4 2 0 -1 -1 t p f i f f));
450 DATA(insert ( 1259 relowner 23 0 4 3 0 -1 -1 t p f i f f));
451 DATA(insert ( 1259 relam 26 0 4 4 0 -1 -1 t p f i f f));
452 DATA(insert ( 1259 relfilenode 26 0 4 5 0 -1 -1 t p f i f f));
453 DATA(insert ( 1259 relpages 23 0 4 6 0 -1 -1 t p f i f f));
454 DATA(insert ( 1259 reltuples 700 0 4 7 0 -1 -1 f p f i f f));
455 DATA(insert ( 1259 reltoastrelid 26 0 4 8 0 -1 -1 t p f i f f));
456 DATA(insert ( 1259 reltoastidxid 26 0 4 9 0 -1 -1 t p f i f f));
457 DATA(insert ( 1259 relhasindex 16 0 1 10 0 -1 -1 t p f c f f));
458 DATA(insert ( 1259 relisshared 16 0 1 11 0 -1 -1 t p f c f f));
459 DATA(insert ( 1259 relkind 18 0 1 12 0 -1 -1 t p f c f f));
460 DATA(insert ( 1259 relnatts 21 0 2 13 0 -1 -1 t p f s f f));
461 DATA(insert ( 1259 relchecks 21 0 2 14 0 -1 -1 t p f s f f));
462 DATA(insert ( 1259 reltriggers 21 0 2 15 0 -1 -1 t p f s f f));
463 DATA(insert ( 1259 relukeys 21 0 2 16 0 -1 -1 t p f s f f));
464 DATA(insert ( 1259 relfkeys 21 0 2 17 0 -1 -1 t p f s f f));
465 DATA(insert ( 1259 relrefs 21 0 2 18 0 -1 -1 t p f s f f));
466 DATA(insert ( 1259 relhasoids 16 0 1 19 0 -1 -1 t p f c f f));
467 DATA(insert ( 1259 relhaspkey 16 0 1 20 0 -1 -1 t p f c f f));
468 DATA(insert ( 1259 relhasrules 16 0 1 21 0 -1 -1 t p f c f f));
469 DATA(insert ( 1259 relhassubclass 16 0 1 22 0 -1 -1 t p f c f f));
470 DATA(insert ( 1259 relacl 1034 0 -1 23 0 -1 -1 f x f i f f));
471 DATA(insert ( 1259 ctid 27 0 6 -1 0 -1 -1 f p f i f f));
472 DATA(insert ( 1259 oid 26 0 4 -2 0 -1 -1 t p f i f f));
473 DATA(insert ( 1259 xmin 28 0 4 -3 0 -1 -1 t p f i f f));
474 DATA(insert ( 1259 cmin 29 0 4 -4 0 -1 -1 t p f i f f));
475 DATA(insert ( 1259 xmax 28 0 4 -5 0 -1 -1 t p f i f f));
476 DATA(insert ( 1259 cmax 29 0 4 -6 0 -1 -1 t p f i f f));
477 DATA(insert ( 1259 tableoid 26 0 4 -7 0 -1 -1 t p f i f f));
480 * pg_xactlock - this is not a real relation, but is a placeholder
481 * to allow a relation OID to be used for transaction
482 * waits. We need a pg_xactlock entry in pg_class only to
483 * ensure that that OID can never be allocated to a real
484 * table; and this entry is just to link to that one.
487 DATA(insert ( 376 xactlockfoo 26 0 4 1 0 -1 -1 t p f i f f));
489 #endif /* PG_ATTRIBUTE_H */