]> granicus.if.org Git - postgresql/blob - src/include/catalog/pg_attribute.h
Privileges on functions and procedural languages
[postgresql] / src / include / catalog / pg_attribute.h
1 /*-------------------------------------------------------------------------
2  *
3  * pg_attribute.h
4  *        definition of the system "attribute" relation (pg_attribute)
5  *        along with the relation's initial contents.
6  *
7  *
8  * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
9  * Portions Copyright (c) 1994, Regents of the University of California
10  *
11  * $Id: pg_attribute.h,v 1.80 2002/02/18 23:11:33 petere Exp $
12  *
13  * NOTES
14  *        the genbki.sh script reads this file and generates .bki
15  *        information from the DATA() statements.
16  *
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
20  *        macros!  -cim 2/5/91
21  *
22  *-------------------------------------------------------------------------
23  */
24 #ifndef PG_ATTRIBUTE_H
25 #define PG_ATTRIBUTE_H
26
27 /* ----------------
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.
31  * ----------------
32  */
33
34 /* ----------------
35  *              pg_attribute definition.  cpp turns this into
36  *              typedef struct FormData_pg_attribute
37  *
38  *              If you change the following, make sure you change the structs for
39  *              system attributes in catalog/heap.c also.
40  * ----------------
41  */
42 CATALOG(pg_attribute) BOOTSTRAP BKI_WITHOUT_OIDS
43 {
44         Oid                     attrelid;               /* OID of relation containing this
45                                                                  * attribute */
46         NameData        attname;                /* name of attribute */
47
48         /*
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
53          * Postgres will fail.
54          */
55         Oid                     atttypid;
56
57         /*
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
61          * column.
62          */
63         int4            attstattarget;
64
65         /*
66          * attlen is a copy of the typlen field from pg_type for this
67          * attribute.  See atttypid comments above.
68          */
69         int2            attlen;
70
71         /*
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.
78          *
79          * System attributes have attribute numbers less than 0 that are unique
80          * within the class, but not constrained to any particular range.
81          *
82          * Note that (attnum - 1) is often used as the index to an array.
83          */
84         int2            attnum;
85
86         /*
87          * attndims is the declared number of dimensions, if an array type,
88          * otherwise zero.
89          */
90         int4            attndims;
91
92         /*
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.
98          */
99         int4            attcacheoff;
100
101         /*
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
106          * typmod.
107          */
108         int4            atttypmod;
109
110         /*
111          * attbyval is a copy of the typbyval field from pg_type for this
112          * attribute.  See atttypid comments above.
113          */
114         bool            attbyval;
115
116         /*----------
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).
127          *----------
128          */
129         char            attstorage;
130
131         /* This flag indicates that the attribute is really a set */
132         bool            attisset;
133
134         /*
135          * attalign is a copy of the typalign field from pg_type for this
136          * attribute.  See atttypid comments above.
137          */
138         char            attalign;
139
140         /* This flag represents the "NOT NULL" constraint */
141         bool            attnotnull;
142
143         /* Has DEFAULT value or not */
144         bool            atthasdef;
145 } FormData_pg_attribute;
146
147 /*
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.)
151  */
152 #define ATTRIBUTE_TUPLE_SIZE \
153         (offsetof(FormData_pg_attribute,atthasdef) + sizeof(bool))
154
155 /* ----------------
156  *              Form_pg_attribute corresponds to a pointer to a tuple with
157  *              the format of pg_attribute relation.
158  * ----------------
159  */
160 typedef FormData_pg_attribute *Form_pg_attribute;
161
162 /* ----------------
163  *              compiler constants for pg_attribute
164  * ----------------
165  */
166
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
183
184
185 #ifdef  _DROP_COLUMN_HACK__
186 /*
187  *      CONSTANT and MACROS for DROP COLUMN implementation
188  */
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__ */
199
200 /* ----------------
201  *              SCHEMA_ macros for declaring hardcoded tuple descriptors.
202  *              these are used in utils/cache/relcache.c
203  * ----------------
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) ] = \
210         { \
211                 CppConcat(Schema_,x) \
212         }
213  */
214
215 /* ----------------
216  *              initial contents of pg_attribute
217  *
218  * NOTE: only "bootstrapped" relations need to be declared here.
219  * ----------------
220  */
221
222 /* ----------------
223  *              pg_type schema
224  * ----------------
225  */
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 }
244
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));
269
270 /* ----------------
271  *              pg_database
272  * ----------------
273  */
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));
291
292 /* ----------------
293  *              pg_proc
294  * ----------------
295  */
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 }, \
314 { 1255, {"proacl"},                       1034, 0, -1, 18, 0, -1, -1, false, 'x', false, 'i', false, false }
315
316 DATA(insert ( 1255 proname                      19 DEFAULT_ATTSTATTARGET NAMEDATALEN   1 0 -1 -1 f p f i f f));
317 DATA(insert ( 1255 proowner                     23 0  4   2 0 -1 -1 t p f i f f));
318 DATA(insert ( 1255 prolang                      26 0  4   3 0 -1 -1 t p f i f f));
319 DATA(insert ( 1255 proisinh                     16 0  1   4 0 -1 -1 t p f c f f));
320 DATA(insert ( 1255 proistrusted         16 0  1   5 0 -1 -1 t p f c f f));
321 DATA(insert ( 1255 proiscachable        16 0  1   6 0 -1 -1 t p f c f f));
322 DATA(insert ( 1255 proisstrict          16 0  1   7 0 -1 -1 t p f c f f));
323 DATA(insert ( 1255 pronargs                     21 0  2   8 0 -1 -1 t p f s f f));
324 DATA(insert ( 1255 proretset            16 0  1   9 0 -1 -1 t p f c f f));
325 DATA(insert ( 1255 prorettype           26 0  4  10 0 -1 -1 t p f i f f));
326 DATA(insert ( 1255 proargtypes          30 0 INDEX_MAX_KEYS*4 11 0 -1 -1 f p f i f f));
327 DATA(insert ( 1255 probyte_pct          23 0  4  12 0 -1 -1 t p f i f f));
328 DATA(insert ( 1255 properbyte_cpu       23 0  4  13 0 -1 -1 t p f i f f));
329 DATA(insert ( 1255 propercall_cpu       23 0  4  14 0 -1 -1 t p f i f f));
330 DATA(insert ( 1255 prooutin_ratio       23 0  4  15 0 -1 -1 t p f i f f));
331 DATA(insert ( 1255 prosrc                       25 0 -1  16 0 -1 -1 f x f i f f));
332 DATA(insert ( 1255 probin                       17 0 -1  17 0 -1 -1 f x f i f f));
333 DATA(insert ( 1255 proacl                 1034 0 -1  18 0 -1 -1 f x f i f f));
334 DATA(insert ( 1255 ctid                         27 0  6  -1 0 -1 -1 f p f i f f));
335 DATA(insert ( 1255 oid                          26 0  4  -2 0 -1 -1 t p f i f f));
336 DATA(insert ( 1255 xmin                         28 0  4  -3 0 -1 -1 t p f i f f));
337 DATA(insert ( 1255 cmin                         29 0  4  -4 0 -1 -1 t p f i f f));
338 DATA(insert ( 1255 xmax                         28 0  4  -5 0 -1 -1 t p f i f f));
339 DATA(insert ( 1255 cmax                         29 0  4  -6 0 -1 -1 t p f i f f));
340 DATA(insert ( 1255 tableoid                     26 0  4  -7 0 -1 -1 t p f i f f));
341
342 /* ----------------
343  *              pg_shadow
344  * ----------------
345  */
346 DATA(insert ( 1260 usename                      19      DEFAULT_ATTSTATTARGET NAMEDATALEN       1 0 -1 -1 f p f i f f));
347 DATA(insert ( 1260 usesysid                     23      DEFAULT_ATTSTATTARGET   4       2 0 -1 -1 t p f i f f));
348 DATA(insert ( 1260 usecreatedb          16      0       1       3 0 -1 -1 t p f c f f));
349 DATA(insert ( 1260 usetrace                     16      0       1       4 0 -1 -1 t p f c f f));
350 DATA(insert ( 1260 usesuper                     16      0       1       5 0 -1 -1 t p f c f f));
351 DATA(insert ( 1260 usecatupd            16      0       1       6 0 -1 -1 t p f c f f));
352 DATA(insert ( 1260 passwd                       25      0  -1   7 0 -1 -1 f x f i f f));
353 DATA(insert ( 1260 valuntil                     702 0   4       8 0 -1 -1 t p f i f f));
354 DATA(insert ( 1260 ctid                         27 0  6  -1 0 -1 -1 f p f i f f));
355 /* no OIDs in pg_shadow */
356 DATA(insert ( 1260 xmin                         28 0  4  -3 0 -1 -1 t p f i f f));
357 DATA(insert ( 1260 cmin                         29 0  4  -4 0 -1 -1 t p f i f f));
358 DATA(insert ( 1260 xmax                         28 0  4  -5 0 -1 -1 t p f i f f));
359 DATA(insert ( 1260 cmax                         29 0  4  -6 0 -1 -1 t p f i f f));
360 DATA(insert ( 1260 tableoid                     26 0  4  -7 0 -1 -1 t p f i f f));
361
362 /* ----------------
363  *              pg_group
364  * ----------------
365  */
366 DATA(insert ( 1261 groname                      19 DEFAULT_ATTSTATTARGET NAMEDATALEN  1 0 -1 -1 f p f i f f));
367 DATA(insert ( 1261 grosysid                     23 DEFAULT_ATTSTATTARGET  4   2 0 -1 -1 t p f i f f));
368 DATA(insert ( 1261 grolist                1007 0 -1   3 0 -1 -1 f x f i f f));
369 DATA(insert ( 1261 ctid                         27 0  6  -1 0 -1 -1 f p f i f f));
370 /* no OIDs in pg_group */
371 DATA(insert ( 1261 xmin                         28 0  4  -3 0 -1 -1 t p f i f f));
372 DATA(insert ( 1261 cmin                         29 0  4  -4 0 -1 -1 t p f i f f));
373 DATA(insert ( 1261 xmax                         28 0  4  -5 0 -1 -1 t p f i f f));
374 DATA(insert ( 1261 cmax                         29 0  4  -6 0 -1 -1 t p f i f f));
375 DATA(insert ( 1261 tableoid                     26 0  4  -7 0 -1 -1 t p f i f f));
376
377 /* ----------------
378  *              pg_attribute
379  * ----------------
380  */
381 #define Schema_pg_attribute \
382 { 1249, {"attrelid"},     26, DEFAULT_ATTSTATTARGET,    4,      1, 0, -1, -1, true, 'p', false, 'i', false, false }, \
383 { 1249, {"attname"},      19, DEFAULT_ATTSTATTARGET, NAMEDATALEN,       2, 0, -1, -1, false, 'p', false, 'i', false, false }, \
384 { 1249, {"atttypid"},     26, 0,        4,      3, 0, -1, -1, true, 'p', false, 'i', false, false }, \
385 { 1249, {"attstattarget"}, 23, 0,       4,      4, 0, -1, -1, true, 'p', false, 'i', false, false }, \
386 { 1249, {"attlen"},               21, 0,        2,      5, 0, -1, -1, true, 'p', false, 's', false, false }, \
387 { 1249, {"attnum"},               21, 0,        2,      6, 0, -1, -1, true, 'p', false, 's', false, false }, \
388 { 1249, {"attndims"},     23, 0,        4,      7, 0, -1, -1, true, 'p', false, 'i', false, false }, \
389 { 1249, {"attcacheoff"},  23, 0,        4,      8, 0, -1, -1, true, 'p', false, 'i', false, false }, \
390 { 1249, {"atttypmod"},    23, 0,        4,      9, 0, -1, -1, true, 'p', false, 'i', false, false }, \
391 { 1249, {"attbyval"},     16, 0,        1, 10, 0, -1, -1, true, 'p', false, 'c', false, false }, \
392 { 1249, {"attstorage"},   18, 0,        1, 11, 0, -1, -1, true, 'p', false, 'c', false, false }, \
393 { 1249, {"attisset"},     16, 0,        1, 12, 0, -1, -1, true, 'p', false, 'c', false, false }, \
394 { 1249, {"attalign"},     18, 0,        1, 13, 0, -1, -1, true, 'p', false, 'c', false, false }, \
395 { 1249, {"attnotnull"},  16, 0, 1, 14, 0, -1, -1, true, 'p', false, 'c', false, false }, \
396 { 1249, {"atthasdef"},   16, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', false, false }
397
398 DATA(insert ( 1249 attrelid                     26 DEFAULT_ATTSTATTARGET  4   1 0 -1 -1 t p f i f f));
399 DATA(insert ( 1249 attname                      19 DEFAULT_ATTSTATTARGET NAMEDATALEN  2 0 -1 -1 f p f i f f));
400 DATA(insert ( 1249 atttypid                     26 0  4   3 0 -1 -1 t p f i f f));
401 DATA(insert ( 1249 attstattarget        23 0  4   4 0 -1 -1 t p f i f f));
402 DATA(insert ( 1249 attlen                       21 0  2   5 0 -1 -1 t p f s f f));
403 DATA(insert ( 1249 attnum                       21 0  2   6 0 -1 -1 t p f s f f));
404 DATA(insert ( 1249 attndims                     23 0  4   7 0 -1 -1 t p f i f f));
405 DATA(insert ( 1249 attcacheoff          23 0  4   8 0 -1 -1 t p f i f f));
406 DATA(insert ( 1249 atttypmod            23 0  4   9 0 -1 -1 t p f i f f));
407 DATA(insert ( 1249 attbyval                     16 0  1  10 0 -1 -1 t p f c f f));
408 DATA(insert ( 1249 attstorage           18 0  1  11 0 -1 -1 t p f c f f));
409 DATA(insert ( 1249 attisset                     16 0  1  12 0 -1 -1 t p f c f f));
410 DATA(insert ( 1249 attalign                     18 0  1  13 0 -1 -1 t p f c f f));
411 DATA(insert ( 1249 attnotnull           16 0  1  14 0 -1 -1 t p f c f f));
412 DATA(insert ( 1249 atthasdef            16 0  1  15 0 -1 -1 t p f c f f));
413 DATA(insert ( 1249 ctid                         27 0  6  -1 0 -1 -1 f p f i f f));
414 /* no OIDs in pg_attribute */
415 DATA(insert ( 1249 xmin                         28 0  4  -3 0 -1 -1 t p f i f f));
416 DATA(insert ( 1249 cmin                         29 0  4  -4 0 -1 -1 t p f i f f));
417 DATA(insert ( 1249 xmax                         28 0  4  -5 0 -1 -1 t p f i f f));
418 DATA(insert ( 1249 cmax                         29 0  4  -6 0 -1 -1 t p f i f f));
419 DATA(insert ( 1249 tableoid                     26 0  4  -7 0 -1 -1 t p f i f f));
420
421 /* ----------------
422  *              pg_class
423  * ----------------
424  */
425 #define Schema_pg_class \
426 { 1259, {"relname"},       19, DEFAULT_ATTSTATTARGET, NAMEDATALEN,      1, 0, -1, -1, false, 'p', false, 'i', false, false }, \
427 { 1259, {"reltype"},       26, 0,       4,      2, 0, -1, -1, true, 'p', false, 'i', false, false }, \
428 { 1259, {"relowner"},      23, 0,       4,      3, 0, -1, -1, true, 'p', false, 'i', false, false }, \
429 { 1259, {"relam"},                 26, 0,       4,      4, 0, -1, -1, true, 'p', false, 'i', false, false }, \
430 { 1259, {"relfilenode"},   26, 0,       4,      5, 0, -1, -1, true, 'p', false, 'i', false, false }, \
431 { 1259, {"relpages"},      23, 0,       4,      6, 0, -1, -1, true, 'p', false, 'i', false, false }, \
432 { 1259, {"reltuples"},     700, 0,      4,      7, 0, -1, -1, false, 'p', false, 'i', false, false }, \
433 { 1259, {"reltoastrelid"}, 26, 0,       4,      8, 0, -1, -1, true, 'p', false, 'i', false, false }, \
434 { 1259, {"reltoastidxid"}, 26, 0,       4,      9, 0, -1, -1, true, 'p', false, 'i', false, false }, \
435 { 1259, {"relhasindex"},   16, 0,       1, 10, 0, -1, -1, true, 'p', false, 'c', false, false }, \
436 { 1259, {"relisshared"},   16, 0,       1, 11, 0, -1, -1, true, 'p', false, 'c', false, false }, \
437 { 1259, {"relkind"},       18, 0,       1, 12, 0, -1, -1, true, 'p', false, 'c', false, false }, \
438 { 1259, {"relnatts"},      21, 0,       2, 13, 0, -1, -1, true, 'p', false, 's', false, false }, \
439 { 1259, {"relchecks"},     21, 0,       2, 14, 0, -1, -1, true, 'p', false, 's', false, false }, \
440 { 1259, {"reltriggers"},   21, 0,       2, 15, 0, -1, -1, true, 'p', false, 's', false, false }, \
441 { 1259, {"relukeys"},      21, 0,       2, 16, 0, -1, -1, true, 'p', false, 's', false, false }, \
442 { 1259, {"relfkeys"},      21, 0,       2, 17, 0, -1, -1, true, 'p', false, 's', false, false }, \
443 { 1259, {"relrefs"},       21, 0,       2, 18, 0, -1, -1, true, 'p', false, 's', false, false }, \
444 { 1259, {"relhasoids"},    16, 0,       1, 19, 0, -1, -1, true, 'p', false, 'c', false, false }, \
445 { 1259, {"relhaspkey"},    16, 0,       1, 20, 0, -1, -1, true, 'p', false, 'c', false, false }, \
446 { 1259, {"relhasrules"},   16, 0,       1, 21, 0, -1, -1, true, 'p', false, 'c', false, false }, \
447 { 1259, {"relhassubclass"},16, 0,       1, 22, 0, -1, -1, true, 'p', false, 'c', false, false }, \
448 { 1259, {"relacl"},              1034, 0,  -1, 23, 0, -1, -1, false, 'x', false, 'i', false, false }
449
450 DATA(insert ( 1259 relname                      19 DEFAULT_ATTSTATTARGET NAMEDATALEN   1 0 -1 -1 f p f i f f));
451 DATA(insert ( 1259 reltype                      26 0  4   2 0 -1 -1 t p f i f f));
452 DATA(insert ( 1259 relowner                     23 0  4   3 0 -1 -1 t p f i f f));
453 DATA(insert ( 1259 relam                        26 0  4   4 0 -1 -1 t p f i f f));
454 DATA(insert ( 1259 relfilenode          26 0  4   5 0 -1 -1 t p f i f f));
455 DATA(insert ( 1259 relpages                     23 0  4   6 0 -1 -1 t p f i f f));
456 DATA(insert ( 1259 reltuples       700 0  4   7 0 -1 -1 f p f i f f));
457 DATA(insert ( 1259 reltoastrelid        26 0  4   8 0 -1 -1 t p f i f f));
458 DATA(insert ( 1259 reltoastidxid        26 0  4   9 0 -1 -1 t p f i f f));
459 DATA(insert ( 1259 relhasindex          16 0  1  10 0 -1 -1 t p f c f f));
460 DATA(insert ( 1259 relisshared          16 0  1  11 0 -1 -1 t p f c f f));
461 DATA(insert ( 1259 relkind                      18 0  1  12 0 -1 -1 t p f c f f));
462 DATA(insert ( 1259 relnatts                     21 0  2  13 0 -1 -1 t p f s f f));
463 DATA(insert ( 1259 relchecks            21 0  2  14 0 -1 -1 t p f s f f));
464 DATA(insert ( 1259 reltriggers          21 0  2  15 0 -1 -1 t p f s f f));
465 DATA(insert ( 1259 relukeys                     21 0  2  16 0 -1 -1 t p f s f f));
466 DATA(insert ( 1259 relfkeys                     21 0  2  17 0 -1 -1 t p f s f f));
467 DATA(insert ( 1259 relrefs                      21 0  2  18 0 -1 -1 t p f s f f));
468 DATA(insert ( 1259 relhasoids           16 0  1  19 0 -1 -1 t p f c f f));
469 DATA(insert ( 1259 relhaspkey           16 0  1  20 0 -1 -1 t p f c f f));
470 DATA(insert ( 1259 relhasrules          16 0  1  21 0 -1 -1 t p f c f f));
471 DATA(insert ( 1259 relhassubclass       16 0  1  22 0 -1 -1 t p f c f f));
472 DATA(insert ( 1259 relacl                 1034 0 -1  23 0 -1 -1 f x f i f f));
473 DATA(insert ( 1259 ctid                         27 0  6  -1 0 -1 -1 f p f i f f));
474 DATA(insert ( 1259 oid                          26 0  4  -2 0 -1 -1 t p f i f f));
475 DATA(insert ( 1259 xmin                         28 0  4  -3 0 -1 -1 t p f i f f));
476 DATA(insert ( 1259 cmin                         29 0  4  -4 0 -1 -1 t p f i f f));
477 DATA(insert ( 1259 xmax                         28 0  4  -5 0 -1 -1 t p f i f f));
478 DATA(insert ( 1259 cmax                         29 0  4  -6 0 -1 -1 t p f i f f));
479 DATA(insert ( 1259 tableoid                     26 0  4  -7 0 -1 -1 t p f i f f));
480
481 /* ----------------
482  *              pg_xactlock - this is not a real relation, but is a placeholder
483  *                                to allow a relation OID to be used for transaction
484  *                                waits.  We need a pg_xactlock entry in pg_class only to
485  *                                ensure that that OID can never be allocated to a real
486  *                                table; and this entry is just to link to that one.
487  * ----------------
488  */
489 DATA(insert ( 376 xactlockfoo           26 0  4   1 0 -1 -1 t p f i f f));
490
491 #endif   /* PG_ATTRIBUTE_H */