]> granicus.if.org Git - postgresql/blob - src/include/catalog/pg_attribute.h
Fix initialization of fake LSN for unlogged relations
[postgresql] / src / include / catalog / pg_attribute.h
1 /*-------------------------------------------------------------------------
2  *
3  * pg_attribute.h
4  *        definition of the "attribute" system catalog (pg_attribute)
5  *
6  * The initial contents of pg_attribute are generated at compile time by
7  * genbki.pl, so there is no pg_attribute.dat file.  Only "bootstrapped"
8  * relations need be included.
9  *
10  *
11  * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
12  * Portions Copyright (c) 1994, Regents of the University of California
13  *
14  * src/include/catalog/pg_attribute.h
15  *
16  * NOTES
17  *        The Catalog.pm module reads this file and derives schema
18  *        information.
19  *
20  *-------------------------------------------------------------------------
21  */
22 #ifndef PG_ATTRIBUTE_H
23 #define PG_ATTRIBUTE_H
24
25 #include "catalog/genbki.h"
26 #include "catalog/pg_attribute_d.h"
27
28 /* ----------------
29  *              pg_attribute definition.  cpp turns this into
30  *              typedef struct FormData_pg_attribute
31  *
32  *              If you change the following, make sure you change the structs for
33  *              system attributes in catalog/heap.c also.
34  *              You may need to change catalog/genbki.pl as well.
35  * ----------------
36  */
37 CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75,AttributeRelation_Rowtype_Id) BKI_SCHEMA_MACRO
38 {
39         Oid                     attrelid;               /* OID of relation containing this attribute */
40         NameData        attname;                /* name of attribute */
41
42         /*
43          * atttypid is the OID of the instance in Catalog Class pg_type that
44          * defines the data type of this attribute (e.g. int4).  Information in
45          * that instance is redundant with the attlen, attbyval, and attalign
46          * attributes of this instance, so they had better match or Postgres will
47          * fail.
48          */
49         Oid                     atttypid;
50
51         /*
52          * attstattarget is the target number of statistics datapoints to collect
53          * during VACUUM ANALYZE of this column.  A zero here indicates that we do
54          * not wish to collect any stats about this column. A "-1" here indicates
55          * that no value has been explicitly set for this column, so ANALYZE
56          * should use the default setting.
57          */
58         int32           attstattarget BKI_DEFAULT(-1);
59
60         /*
61          * attlen is a copy of the typlen field from pg_type for this attribute.
62          * See atttypid comments above.
63          */
64         int16           attlen;
65
66         /*
67          * attnum is the "attribute number" for the attribute:  A value that
68          * uniquely identifies this attribute within its class. For user
69          * attributes, Attribute numbers are greater than 0 and not greater than
70          * the number of attributes in the class. I.e. if the Class pg_class says
71          * that Class XYZ has 10 attributes, then the user attribute numbers in
72          * Class pg_attribute must be 1-10.
73          *
74          * System attributes have attribute numbers less than 0 that are unique
75          * within the class, but not constrained to any particular range.
76          *
77          * Note that (attnum - 1) is often used as the index to an array.
78          */
79         int16           attnum;
80
81         /*
82          * attndims is the declared number of dimensions, if an array type,
83          * otherwise zero.
84          */
85         int32           attndims;
86
87         /*
88          * fastgetattr() uses attcacheoff to cache byte offsets of attributes in
89          * heap tuples.  The value actually stored in pg_attribute (-1) indicates
90          * no cached value.  But when we copy these tuples into a tuple
91          * descriptor, we may then update attcacheoff in the copies. This speeds
92          * up the attribute walking process.
93          */
94         int32           attcacheoff BKI_DEFAULT(-1);
95
96         /*
97          * atttypmod records type-specific data supplied at table creation time
98          * (for example, the max length of a varchar field).  It is passed to
99          * type-specific input and output functions as the third argument. The
100          * value will generally be -1 for types that do not need typmod.
101          */
102         int32           atttypmod BKI_DEFAULT(-1);
103
104         /*
105          * attbyval is a copy of the typbyval field from pg_type for this
106          * attribute.  See atttypid comments above.
107          */
108         bool            attbyval;
109
110         /*----------
111          * attstorage tells for VARLENA attributes, what the heap access
112          * methods can do to it if a given tuple doesn't fit into a page.
113          * Possible values are
114          *              'p': Value must be stored plain always
115          *              'e': Value can be stored in "secondary" relation (if relation
116          *                       has one, see pg_class.reltoastrelid)
117          *              'm': Value can be stored compressed inline
118          *              'x': Value can be stored compressed inline or in "secondary"
119          * Note that 'm' fields can also be moved out to secondary storage,
120          * but only as a last resort ('e' and 'x' fields are moved first).
121          *----------
122          */
123         char            attstorage;
124
125         /*
126          * attalign is a copy of the typalign field from pg_type for this
127          * attribute.  See atttypid comments above.
128          */
129         char            attalign;
130
131         /* This flag represents the "NOT NULL" constraint */
132         bool            attnotnull;
133
134         /* Has DEFAULT value or not */
135         bool            atthasdef BKI_DEFAULT(f);
136
137         /* Has a missing value or not */
138         bool            atthasmissing BKI_DEFAULT(f);
139
140         /* One of the ATTRIBUTE_IDENTITY_* constants below, or '\0' */
141         char            attidentity BKI_DEFAULT('\0');
142
143         /* One of the ATTRIBUTE_GENERATED_* constants below, or '\0' */
144         char            attgenerated BKI_DEFAULT('\0');
145
146         /* Is dropped (ie, logically invisible) or not */
147         bool            attisdropped BKI_DEFAULT(f);
148
149         /*
150          * This flag specifies whether this column has ever had a local
151          * definition.  It is set for normal non-inherited columns, but also for
152          * columns that are inherited from parents if also explicitly listed in
153          * CREATE TABLE INHERITS.  It is also set when inheritance is removed from
154          * a table with ALTER TABLE NO INHERIT.  If the flag is set, the column is
155          * not dropped by a parent's DROP COLUMN even if this causes the column's
156          * attinhcount to become zero.
157          */
158         bool            attislocal BKI_DEFAULT(t);
159
160         /* Number of times inherited from direct parent relation(s) */
161         int32           attinhcount BKI_DEFAULT(0);
162
163         /* attribute's collation */
164         Oid                     attcollation;
165
166 #ifdef CATALOG_VARLEN                   /* variable-length fields start here */
167         /* NOTE: The following fields are not present in tuple descriptors. */
168
169         /* Column-level access permissions */
170         aclitem         attacl[1] BKI_DEFAULT(_null_);
171
172         /* Column-level options */
173         text            attoptions[1] BKI_DEFAULT(_null_);
174
175         /* Column-level FDW options */
176         text            attfdwoptions[1] BKI_DEFAULT(_null_);
177
178         /*
179          * Missing value for added columns. This is a one element array which lets
180          * us store a value of the attribute type here.
181          */
182         anyarray        attmissingval BKI_DEFAULT(_null_);
183 #endif
184 } FormData_pg_attribute;
185
186 /*
187  * ATTRIBUTE_FIXED_PART_SIZE is the size of the fixed-layout,
188  * guaranteed-not-null part of a pg_attribute row.  This is in fact as much
189  * of the row as gets copied into tuple descriptors, so don't expect you
190  * can access fields beyond attcollation except in a real tuple!
191  */
192 #define ATTRIBUTE_FIXED_PART_SIZE \
193         (offsetof(FormData_pg_attribute,attcollation) + sizeof(Oid))
194
195 /* ----------------
196  *              Form_pg_attribute corresponds to a pointer to a tuple with
197  *              the format of pg_attribute relation.
198  * ----------------
199  */
200 typedef FormData_pg_attribute *Form_pg_attribute;
201
202 #ifdef EXPOSE_TO_CLIENT_CODE
203
204 #define           ATTRIBUTE_IDENTITY_ALWAYS             'a'
205 #define           ATTRIBUTE_IDENTITY_BY_DEFAULT 'd'
206
207 #define           ATTRIBUTE_GENERATED_STORED    's'
208
209 #endif                                                  /* EXPOSE_TO_CLIENT_CODE */
210
211 #endif                                                  /* PG_ATTRIBUTE_H */