1 /*-------------------------------------------------------------------------
4 * definition of the system "attribute" relation (pg_attribute)
5 * along with the relation's initial contents.
8 * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
9 * Portions Copyright (c) 1994, Regents of the University of California
11 * $PostgreSQL: pgsql/src/include/catalog/pg_attribute.h,v 1.125 2006/10/04 00:30:07 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 definitions and the
29 * CATALOG(), BKI_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 #define AttributeRelationId 1249
44 CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS
46 Oid attrelid; /* OID of relation containing this attribute */
47 NameData attname; /* name of attribute */
50 * atttypid is the OID of the instance in Catalog Class pg_type that
51 * defines the data type of this attribute (e.g. int4). Information in
52 * that instance is redundant with the attlen, attbyval, and attalign
53 * attributes of this instance, so they had better match or Postgres will
59 * attstattarget is the target number of statistics datapoints to collect
60 * during VACUUM ANALYZE of this column. A zero here indicates that we do
61 * not wish to collect any stats about this column. A "-1" here indicates
62 * that no value has been explicitly set for this column, so ANALYZE
63 * should use the default setting.
68 * attlen is a copy of the typlen field from pg_type for this attribute.
69 * See atttypid comments above.
74 * attnum is the "attribute number" for the attribute: A value that
75 * uniquely identifies this attribute within its class. For user
76 * attributes, Attribute numbers are greater than 0 and not greater than
77 * the number of attributes in the class. I.e. if the Class pg_class says
78 * that Class XYZ has 10 attributes, then the user attribute numbers in
79 * Class pg_attribute must be 1-10.
81 * System attributes have attribute numbers less than 0 that are unique
82 * within the class, but not constrained to any particular range.
84 * Note that (attnum - 1) is often used as the index to an array.
89 * attndims is the declared number of dimensions, if an array type,
95 * fastgetattr() uses attcacheoff to cache byte offsets of attributes in
96 * heap tuples. The value actually stored in pg_attribute (-1) indicates
97 * no cached value. But when we copy these tuples into a tuple
98 * descriptor, we may then update attcacheoff in the copies. This speeds
99 * up the attribute walking process.
104 * atttypmod records type-specific data supplied at table creation time
105 * (for example, the max length of a varchar field). It is passed to
106 * type-specific input and output functions as the third argument. The
107 * value will generally be -1 for types that do not need typmod.
112 * attbyval is a copy of the typbyval field from pg_type for this
113 * attribute. See atttypid comments above.
118 * attstorage tells for VARLENA attributes, what the heap access
119 * methods can do to it if a given tuple doesn't fit into a page.
120 * Possible values are
121 * 'p': Value must be stored plain always
122 * 'e': Value can be stored in "secondary" relation (if relation
123 * has one, see pg_class.reltoastrelid)
124 * 'm': Value can be stored compressed inline
125 * 'x': Value can be stored compressed inline or in "secondary"
126 * Note that 'm' fields can also be moved out to secondary storage,
127 * but only as a last resort ('e' and 'x' fields are moved first).
133 * attalign is a copy of the typalign field from pg_type for this
134 * attribute. See atttypid comments above.
138 /* This flag represents the "NOT NULL" constraint */
141 /* Has DEFAULT value or not */
144 /* Is dropped (ie, logically invisible) or not */
147 /* Has a local definition (hence, do not drop when attinhcount is 0) */
150 /* Number of times inherited from direct parent relation(s) */
152 } FormData_pg_attribute;
155 * someone should figure out how to do this properly. (The problem is
156 * the size of the C struct is not the same as the size of the tuple
157 * because of alignment padding at the end of the struct.)
159 #define ATTRIBUTE_TUPLE_SIZE \
160 (offsetof(FormData_pg_attribute,attinhcount) + sizeof(int4))
163 * Form_pg_attribute corresponds to a pointer to a tuple with
164 * the format of pg_attribute relation.
167 typedef FormData_pg_attribute *Form_pg_attribute;
170 * compiler constants for pg_attribute
174 #define Natts_pg_attribute 17
175 #define Anum_pg_attribute_attrelid 1
176 #define Anum_pg_attribute_attname 2
177 #define Anum_pg_attribute_atttypid 3
178 #define Anum_pg_attribute_attstattarget 4
179 #define Anum_pg_attribute_attlen 5
180 #define Anum_pg_attribute_attnum 6
181 #define Anum_pg_attribute_attndims 7
182 #define Anum_pg_attribute_attcacheoff 8
183 #define Anum_pg_attribute_atttypmod 9
184 #define Anum_pg_attribute_attbyval 10
185 #define Anum_pg_attribute_attstorage 11
186 #define Anum_pg_attribute_attalign 12
187 #define Anum_pg_attribute_attnotnull 13
188 #define Anum_pg_attribute_atthasdef 14
189 #define Anum_pg_attribute_attisdropped 15
190 #define Anum_pg_attribute_attislocal 16
191 #define Anum_pg_attribute_attinhcount 17
196 * SCHEMA_ macros for declaring hardcoded tuple descriptors.
197 * these are used in utils/cache/relcache.c
199 #define SCHEMA_NAME(x) CppConcat(Name_,x)
200 #define SCHEMA_DESC(x) CppConcat(Desc_,x)
201 #define SCHEMA_NATTS(x) CppConcat(Natts_,x)
202 #define SCHEMA_DEF(x) \
203 FormData_pg_attribute \
204 SCHEMA_DESC(x) [ SCHEMA_NATTS(x) ] = \
206 CppConcat(Schema_,x) \
211 * initial contents of pg_attribute
213 * NOTE: only "bootstrapped" relations need to be declared here.
215 * NOTE: if changing pg_attribute column set, also see the hard-coded
216 * entries for system attributes in catalog/heap.c.
224 #define Schema_pg_type \
225 { 1247, {"typname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
226 { 1247, {"typnamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
227 { 1247, {"typowner"}, 26, -1, 4, 3, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
228 { 1247, {"typlen"}, 21, -1, 2, 4, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
229 { 1247, {"typbyval"}, 16, -1, 1, 5, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
230 { 1247, {"typtype"}, 18, -1, 1, 6, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
231 { 1247, {"typisdefined"}, 16, -1, 1, 7, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
232 { 1247, {"typdelim"}, 18, -1, 1, 8, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
233 { 1247, {"typrelid"}, 26, -1, 4, 9, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
234 { 1247, {"typelem"}, 26, -1, 4, 10, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
235 { 1247, {"typinput"}, 24, -1, 4, 11, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
236 { 1247, {"typoutput"}, 24, -1, 4, 12, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
237 { 1247, {"typreceive"}, 24, -1, 4, 13, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
238 { 1247, {"typsend"}, 24, -1, 4, 14, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
239 { 1247, {"typanalyze"}, 24, -1, 4, 15, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
240 { 1247, {"typalign"}, 18, -1, 1, 16, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
241 { 1247, {"typstorage"}, 18, -1, 1, 17, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
242 { 1247, {"typnotnull"}, 16, -1, 1, 18, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
243 { 1247, {"typbasetype"}, 26, -1, 4, 19, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
244 { 1247, {"typtypmod"}, 23, -1, 4, 20, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
245 { 1247, {"typndims"}, 23, -1, 4, 21, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
246 { 1247, {"typdefaultbin"}, 25, -1, -1, 22, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
247 { 1247, {"typdefault"}, 25, -1, -1, 23, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }
249 DATA(insert ( 1247 typname 19 -1 NAMEDATALEN 1 0 -1 -1 f p i t f f t 0));
250 DATA(insert ( 1247 typnamespace 26 -1 4 2 0 -1 -1 t p i t f f t 0));
251 DATA(insert ( 1247 typowner 26 -1 4 3 0 -1 -1 t p i t f f t 0));
252 DATA(insert ( 1247 typlen 21 -1 2 4 0 -1 -1 t p s t f f t 0));
253 DATA(insert ( 1247 typbyval 16 -1 1 5 0 -1 -1 t p c t f f t 0));
254 DATA(insert ( 1247 typtype 18 -1 1 6 0 -1 -1 t p c t f f t 0));
255 DATA(insert ( 1247 typisdefined 16 -1 1 7 0 -1 -1 t p c t f f t 0));
256 DATA(insert ( 1247 typdelim 18 -1 1 8 0 -1 -1 t p c t f f t 0));
257 DATA(insert ( 1247 typrelid 26 -1 4 9 0 -1 -1 t p i t f f t 0));
258 DATA(insert ( 1247 typelem 26 -1 4 10 0 -1 -1 t p i t f f t 0));
259 DATA(insert ( 1247 typinput 24 -1 4 11 0 -1 -1 t p i t f f t 0));
260 DATA(insert ( 1247 typoutput 24 -1 4 12 0 -1 -1 t p i t f f t 0));
261 DATA(insert ( 1247 typreceive 24 -1 4 13 0 -1 -1 t p i t f f t 0));
262 DATA(insert ( 1247 typsend 24 -1 4 14 0 -1 -1 t p i t f f t 0));
263 DATA(insert ( 1247 typanalyze 24 -1 4 15 0 -1 -1 t p i t f f t 0));
264 DATA(insert ( 1247 typalign 18 -1 1 16 0 -1 -1 t p c t f f t 0));
265 DATA(insert ( 1247 typstorage 18 -1 1 17 0 -1 -1 t p c t f f t 0));
266 DATA(insert ( 1247 typnotnull 16 -1 1 18 0 -1 -1 t p c t f f t 0));
267 DATA(insert ( 1247 typbasetype 26 -1 4 19 0 -1 -1 t p i t f f t 0));
268 DATA(insert ( 1247 typtypmod 23 -1 4 20 0 -1 -1 t p i t f f t 0));
269 DATA(insert ( 1247 typndims 23 -1 4 21 0 -1 -1 t p i t f f t 0));
270 DATA(insert ( 1247 typdefaultbin 25 -1 -1 22 0 -1 -1 f x i f f f t 0));
271 DATA(insert ( 1247 typdefault 25 -1 -1 23 0 -1 -1 f x i f f f t 0));
272 DATA(insert ( 1247 ctid 27 0 6 -1 0 -1 -1 f p s t f f t 0));
273 DATA(insert ( 1247 oid 26 0 4 -2 0 -1 -1 t p i t f f t 0));
274 DATA(insert ( 1247 xmin 28 0 4 -3 0 -1 -1 t p i t f f t 0));
275 DATA(insert ( 1247 cmin 29 0 4 -4 0 -1 -1 t p i t f f t 0));
276 DATA(insert ( 1247 xmax 28 0 4 -5 0 -1 -1 t p i t f f t 0));
277 DATA(insert ( 1247 cmax 29 0 4 -6 0 -1 -1 t p i t f f t 0));
278 DATA(insert ( 1247 tableoid 26 0 4 -7 0 -1 -1 t p i t f f t 0));
284 #define Schema_pg_proc \
285 { 1255, {"proname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
286 { 1255, {"pronamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
287 { 1255, {"proowner"}, 26, -1, 4, 3, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
288 { 1255, {"prolang"}, 26, -1, 4, 4, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
289 { 1255, {"proisagg"}, 16, -1, 1, 5, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
290 { 1255, {"prosecdef"}, 16, -1, 1, 6, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
291 { 1255, {"proisstrict"}, 16, -1, 1, 7, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
292 { 1255, {"proretset"}, 16, -1, 1, 8, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
293 { 1255, {"provolatile"}, 18, -1, 1, 9, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
294 { 1255, {"pronargs"}, 21, -1, 2, 10, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
295 { 1255, {"prorettype"}, 26, -1, 4, 11, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
296 { 1255, {"proargtypes"}, 30, -1, -1, 12, 1, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
297 { 1255, {"proallargtypes"}, 1028, -1, -1, 13, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
298 { 1255, {"proargmodes"}, 1002, -1, -1, 14, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
299 { 1255, {"proargnames"}, 1009, -1, -1, 15, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
300 { 1255, {"prosrc"}, 25, -1, -1, 16, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
301 { 1255, {"probin"}, 17, -1, -1, 17, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
302 { 1255, {"proacl"}, 1034, -1, -1, 18, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }
304 DATA(insert ( 1255 proname 19 -1 NAMEDATALEN 1 0 -1 -1 f p i t f f t 0));
305 DATA(insert ( 1255 pronamespace 26 -1 4 2 0 -1 -1 t p i t f f t 0));
306 DATA(insert ( 1255 proowner 26 -1 4 3 0 -1 -1 t p i t f f t 0));
307 DATA(insert ( 1255 prolang 26 -1 4 4 0 -1 -1 t p i t f f t 0));
308 DATA(insert ( 1255 proisagg 16 -1 1 5 0 -1 -1 t p c t f f t 0));
309 DATA(insert ( 1255 prosecdef 16 -1 1 6 0 -1 -1 t p c t f f t 0));
310 DATA(insert ( 1255 proisstrict 16 -1 1 7 0 -1 -1 t p c t f f t 0));
311 DATA(insert ( 1255 proretset 16 -1 1 8 0 -1 -1 t p c t f f t 0));
312 DATA(insert ( 1255 provolatile 18 -1 1 9 0 -1 -1 t p c t f f t 0));
313 DATA(insert ( 1255 pronargs 21 -1 2 10 0 -1 -1 t p s t f f t 0));
314 DATA(insert ( 1255 prorettype 26 -1 4 11 0 -1 -1 t p i t f f t 0));
315 DATA(insert ( 1255 proargtypes 30 -1 -1 12 1 -1 -1 f p i t f f t 0));
316 DATA(insert ( 1255 proallargtypes 1028 -1 -1 13 1 -1 -1 f x i f f f t 0));
317 DATA(insert ( 1255 proargmodes 1002 -1 -1 14 1 -1 -1 f x i f f f t 0));
318 DATA(insert ( 1255 proargnames 1009 -1 -1 15 1 -1 -1 f x i f f f t 0));
319 DATA(insert ( 1255 prosrc 25 -1 -1 16 0 -1 -1 f x i f f f t 0));
320 DATA(insert ( 1255 probin 17 -1 -1 17 0 -1 -1 f x i f f f t 0));
321 DATA(insert ( 1255 proacl 1034 -1 -1 18 1 -1 -1 f x i f f f t 0));
322 DATA(insert ( 1255 ctid 27 0 6 -1 0 -1 -1 f p s t f f t 0));
323 DATA(insert ( 1255 oid 26 0 4 -2 0 -1 -1 t p i t f f t 0));
324 DATA(insert ( 1255 xmin 28 0 4 -3 0 -1 -1 t p i t f f t 0));
325 DATA(insert ( 1255 cmin 29 0 4 -4 0 -1 -1 t p i t f f t 0));
326 DATA(insert ( 1255 xmax 28 0 4 -5 0 -1 -1 t p i t f f t 0));
327 DATA(insert ( 1255 cmax 29 0 4 -6 0 -1 -1 t p i t f f t 0));
328 DATA(insert ( 1255 tableoid 26 0 4 -7 0 -1 -1 t p i t f f t 0));
334 #define Schema_pg_attribute \
335 { 1249, {"attrelid"}, 26, -1, 4, 1, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
336 { 1249, {"attname"}, 19, -1, NAMEDATALEN, 2, 0, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
337 { 1249, {"atttypid"}, 26, -1, 4, 3, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
338 { 1249, {"attstattarget"}, 23, -1, 4, 4, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
339 { 1249, {"attlen"}, 21, -1, 2, 5, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
340 { 1249, {"attnum"}, 21, -1, 2, 6, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
341 { 1249, {"attndims"}, 23, -1, 4, 7, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
342 { 1249, {"attcacheoff"}, 23, -1, 4, 8, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
343 { 1249, {"atttypmod"}, 23, -1, 4, 9, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
344 { 1249, {"attbyval"}, 16, -1, 1, 10, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
345 { 1249, {"attstorage"}, 18, -1, 1, 11, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
346 { 1249, {"attalign"}, 18, -1, 1, 12, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
347 { 1249, {"attnotnull"}, 16, -1, 1, 13, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
348 { 1249, {"atthasdef"}, 16, -1, 1, 14, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
349 { 1249, {"attisdropped"}, 16, -1, 1, 15, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
350 { 1249, {"attislocal"}, 16, -1, 1, 16, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
351 { 1249, {"attinhcount"}, 23, -1, 4, 17, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }
353 DATA(insert ( 1249 attrelid 26 -1 4 1 0 -1 -1 t p i t f f t 0));
354 DATA(insert ( 1249 attname 19 -1 NAMEDATALEN 2 0 -1 -1 f p i t f f t 0));
355 DATA(insert ( 1249 atttypid 26 -1 4 3 0 -1 -1 t p i t f f t 0));
356 DATA(insert ( 1249 attstattarget 23 -1 4 4 0 -1 -1 t p i t f f t 0));
357 DATA(insert ( 1249 attlen 21 -1 2 5 0 -1 -1 t p s t f f t 0));
358 DATA(insert ( 1249 attnum 21 -1 2 6 0 -1 -1 t p s t f f t 0));
359 DATA(insert ( 1249 attndims 23 -1 4 7 0 -1 -1 t p i t f f t 0));
360 DATA(insert ( 1249 attcacheoff 23 -1 4 8 0 -1 -1 t p i t f f t 0));
361 DATA(insert ( 1249 atttypmod 23 -1 4 9 0 -1 -1 t p i t f f t 0));
362 DATA(insert ( 1249 attbyval 16 -1 1 10 0 -1 -1 t p c t f f t 0));
363 DATA(insert ( 1249 attstorage 18 -1 1 11 0 -1 -1 t p c t f f t 0));
364 DATA(insert ( 1249 attalign 18 -1 1 12 0 -1 -1 t p c t f f t 0));
365 DATA(insert ( 1249 attnotnull 16 -1 1 13 0 -1 -1 t p c t f f t 0));
366 DATA(insert ( 1249 atthasdef 16 -1 1 14 0 -1 -1 t p c t f f t 0));
367 DATA(insert ( 1249 attisdropped 16 -1 1 15 0 -1 -1 t p c t f f t 0));
368 DATA(insert ( 1249 attislocal 16 -1 1 16 0 -1 -1 t p c t f f t 0));
369 DATA(insert ( 1249 attinhcount 23 -1 4 17 0 -1 -1 t p i t f f t 0));
370 DATA(insert ( 1249 ctid 27 0 6 -1 0 -1 -1 f p s t f f t 0));
371 /* no OIDs in pg_attribute */
372 DATA(insert ( 1249 xmin 28 0 4 -3 0 -1 -1 t p i t f f t 0));
373 DATA(insert ( 1249 cmin 29 0 4 -4 0 -1 -1 t p i t f f t 0));
374 DATA(insert ( 1249 xmax 28 0 4 -5 0 -1 -1 t p i t f f t 0));
375 DATA(insert ( 1249 cmax 29 0 4 -6 0 -1 -1 t p i t f f t 0));
376 DATA(insert ( 1249 tableoid 26 0 4 -7 0 -1 -1 t p i t f f t 0));
382 #define Schema_pg_class \
383 { 1259, {"relname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
384 { 1259, {"relnamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
385 { 1259, {"reltype"}, 26, -1, 4, 3, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
386 { 1259, {"relowner"}, 26, -1, 4, 4, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
387 { 1259, {"relam"}, 26, -1, 4, 5, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
388 { 1259, {"relfilenode"}, 26, -1, 4, 6, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
389 { 1259, {"reltablespace"}, 26, -1, 4, 7, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
390 { 1259, {"relpages"}, 23, -1, 4, 8, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
391 { 1259, {"reltuples"}, 700, -1, 4, 9, 0, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
392 { 1259, {"reltoastrelid"}, 26, -1, 4, 10, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
393 { 1259, {"reltoastidxid"}, 26, -1, 4, 11, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
394 { 1259, {"relhasindex"}, 16, -1, 1, 12, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
395 { 1259, {"relisshared"}, 16, -1, 1, 13, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
396 { 1259, {"relkind"}, 18, -1, 1, 14, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
397 { 1259, {"relnatts"}, 21, -1, 2, 15, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
398 { 1259, {"relchecks"}, 21, -1, 2, 16, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
399 { 1259, {"reltriggers"}, 21, -1, 2, 17, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
400 { 1259, {"relukeys"}, 21, -1, 2, 18, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
401 { 1259, {"relfkeys"}, 21, -1, 2, 19, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
402 { 1259, {"relrefs"}, 21, -1, 2, 20, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
403 { 1259, {"relhasoids"}, 16, -1, 1, 21, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
404 { 1259, {"relhaspkey"}, 16, -1, 1, 22, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
405 { 1259, {"relhasrules"}, 16, -1, 1, 23, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
406 { 1259, {"relhassubclass"},16, -1, 1, 24, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
407 { 1259, {"relminxid"}, 28, -1, 4, 25, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
408 { 1259, {"relvacuumxid"}, 28, -1, 4, 26, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
409 { 1259, {"relacl"}, 1034, -1, -1, 27, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
410 { 1259, {"reloptions"}, 1009, -1, -1, 28, 1, -1, -1, false, 'x', 'i', false, false, false, true, 0 }
412 DATA(insert ( 1259 relname 19 -1 NAMEDATALEN 1 0 -1 -1 f p i t f f t 0));
413 DATA(insert ( 1259 relnamespace 26 -1 4 2 0 -1 -1 t p i t f f t 0));
414 DATA(insert ( 1259 reltype 26 -1 4 3 0 -1 -1 t p i t f f t 0));
415 DATA(insert ( 1259 relowner 26 -1 4 4 0 -1 -1 t p i t f f t 0));
416 DATA(insert ( 1259 relam 26 -1 4 5 0 -1 -1 t p i t f f t 0));
417 DATA(insert ( 1259 relfilenode 26 -1 4 6 0 -1 -1 t p i t f f t 0));
418 DATA(insert ( 1259 reltablespace 26 -1 4 7 0 -1 -1 t p i t f f t 0));
419 DATA(insert ( 1259 relpages 23 -1 4 8 0 -1 -1 t p i t f f t 0));
420 DATA(insert ( 1259 reltuples 700 -1 4 9 0 -1 -1 f p i t f f t 0));
421 DATA(insert ( 1259 reltoastrelid 26 -1 4 10 0 -1 -1 t p i t f f t 0));
422 DATA(insert ( 1259 reltoastidxid 26 -1 4 11 0 -1 -1 t p i t f f t 0));
423 DATA(insert ( 1259 relhasindex 16 -1 1 12 0 -1 -1 t p c t f f t 0));
424 DATA(insert ( 1259 relisshared 16 -1 1 13 0 -1 -1 t p c t f f t 0));
425 DATA(insert ( 1259 relkind 18 -1 1 14 0 -1 -1 t p c t f f t 0));
426 DATA(insert ( 1259 relnatts 21 -1 2 15 0 -1 -1 t p s t f f t 0));
427 DATA(insert ( 1259 relchecks 21 -1 2 16 0 -1 -1 t p s t f f t 0));
428 DATA(insert ( 1259 reltriggers 21 -1 2 17 0 -1 -1 t p s t f f t 0));
429 DATA(insert ( 1259 relukeys 21 -1 2 18 0 -1 -1 t p s t f f t 0));
430 DATA(insert ( 1259 relfkeys 21 -1 2 19 0 -1 -1 t p s t f f t 0));
431 DATA(insert ( 1259 relrefs 21 -1 2 20 0 -1 -1 t p s t f f t 0));
432 DATA(insert ( 1259 relhasoids 16 -1 1 21 0 -1 -1 t p c t f f t 0));
433 DATA(insert ( 1259 relhaspkey 16 -1 1 22 0 -1 -1 t p c t f f t 0));
434 DATA(insert ( 1259 relhasrules 16 -1 1 23 0 -1 -1 t p c t f f t 0));
435 DATA(insert ( 1259 relhassubclass 16 -1 1 24 0 -1 -1 t p c t f f t 0));
436 DATA(insert ( 1259 relminxid 28 -1 4 25 0 -1 -1 t p i t f f t 0));
437 DATA(insert ( 1259 relvacuumxid 28 -1 4 26 0 -1 -1 t p i t f f t 0));
438 DATA(insert ( 1259 relacl 1034 -1 -1 27 1 -1 -1 f x i f f f t 0));
439 DATA(insert ( 1259 reloptions 1009 -1 -1 28 1 -1 -1 f x i f f f t 0));
440 DATA(insert ( 1259 ctid 27 0 6 -1 0 -1 -1 f p s t f f t 0));
441 DATA(insert ( 1259 oid 26 0 4 -2 0 -1 -1 t p i t f f t 0));
442 DATA(insert ( 1259 xmin 28 0 4 -3 0 -1 -1 t p i t f f t 0));
443 DATA(insert ( 1259 cmin 29 0 4 -4 0 -1 -1 t p i t f f t 0));
444 DATA(insert ( 1259 xmax 28 0 4 -5 0 -1 -1 t p i t f f t 0));
445 DATA(insert ( 1259 cmax 29 0 4 -6 0 -1 -1 t p i t f f t 0));
446 DATA(insert ( 1259 tableoid 26 0 4 -7 0 -1 -1 t p i t f f t 0));
451 * pg_index is not bootstrapped in the same way as the other relations that
452 * have hardwired pg_attribute entries in this file. However, we do need
453 * a "Schema_xxx" macro for it --- see relcache.c.
456 #define Schema_pg_index \
457 { 0, {"indexrelid"}, 26, -1, 4, 1, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
458 { 0, {"indrelid"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \
459 { 0, {"indnatts"}, 21, -1, 2, 3, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \
460 { 0, {"indisunique"}, 16, -1, 1, 4, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
461 { 0, {"indisprimary"}, 16, -1, 1, 5, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
462 { 0, {"indisclustered"}, 16, -1, 1, 6, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
463 { 0, {"indisvalid"}, 16, -1, 1, 7, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \
464 { 0, {"indkey"}, 22, -1, -1, 8, 1, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
465 { 0, {"indclass"}, 30, -1, -1, 9, 1, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \
466 { 0, {"indexprs"}, 25, -1, -1, 10, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }, \
467 { 0, {"indpred"}, 25, -1, -1, 11, 0, -1, -1, false, 'x', 'i', false, false, false, true, 0 }
469 #endif /* PG_ATTRIBUTE_H */