123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- /*-------------------------------------------------------------------------
- *
- * pg_attribute.h
- * definition of the system "attribute" relation (pg_attribute)
- * along with the relation's initial contents.
- *
- *
- * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/catalog/pg_attribute.h
- *
- * NOTES
- * the genbki.pl script reads this file and generates .bki
- * information from the DATA() statements.
- *
- *-------------------------------------------------------------------------
- */
- #ifndef PG_ATTRIBUTE_H
- #define PG_ATTRIBUTE_H
- #include "catalog/genbki.h"
- /* ----------------
- * pg_attribute definition. cpp turns this into
- * typedef struct FormData_pg_attribute
- *
- * If you change the following, make sure you change the structs for
- * system attributes in catalog/heap.c also.
- * You may need to change catalog/genbki.pl as well.
- * ----------------
- */
- #define AttributeRelationId 1249
- #define AttributeRelation_Rowtype_Id 75
- CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75) BKI_SCHEMA_MACRO
- {
- Oid attrelid; /* OID of relation containing this attribute */
- NameData attname; /* name of attribute */
- /*
- * atttypid is the OID of the instance in Catalog Class pg_type that
- * defines the data type of this attribute (e.g. int4). Information in
- * that instance is redundant with the attlen, attbyval, and attalign
- * attributes of this instance, so they had better match or Postgres will
- * fail.
- */
- Oid atttypid;
- /*
- * attstattarget is the target number of statistics datapoints to collect
- * during VACUUM ANALYZE of this column. A zero here indicates that we do
- * not wish to collect any stats about this column. A "-1" here indicates
- * that no value has been explicitly set for this column, so ANALYZE
- * should use the default setting.
- */
- int32 attstattarget;
- /*
- * attlen is a copy of the typlen field from pg_type for this attribute.
- * See atttypid comments above.
- */
- int16 attlen;
- /*
- * attnum is the "attribute number" for the attribute: A value that
- * uniquely identifies this attribute within its class. For user
- * attributes, Attribute numbers are greater than 0 and not greater than
- * the number of attributes in the class. I.e. if the Class pg_class says
- * that Class XYZ has 10 attributes, then the user attribute numbers in
- * Class pg_attribute must be 1-10.
- *
- * System attributes have attribute numbers less than 0 that are unique
- * within the class, but not constrained to any particular range.
- *
- * Note that (attnum - 1) is often used as the index to an array.
- */
- int16 attnum;
- /*
- * attndims is the declared number of dimensions, if an array type,
- * otherwise zero.
- */
- int32 attndims;
- /*
- * fastgetattr() uses attcacheoff to cache byte offsets of attributes in
- * heap tuples. The value actually stored in pg_attribute (-1) indicates
- * no cached value. But when we copy these tuples into a tuple
- * descriptor, we may then update attcacheoff in the copies. This speeds
- * up the attribute walking process.
- */
- int32 attcacheoff;
- /*
- * atttypmod records type-specific data supplied at table creation time
- * (for example, the max length of a varchar field). It is passed to
- * type-specific input and output functions as the third argument. The
- * value will generally be -1 for types that do not need typmod.
- */
- int32 atttypmod;
- /*
- * attbyval is a copy of the typbyval field from pg_type for this
- * attribute. See atttypid comments above.
- */
- bool attbyval;
- /*----------
- * attstorage tells for VARLENA attributes, what the heap access
- * methods can do to it if a given tuple doesn't fit into a page.
- * Possible values are
- * 'p': Value must be stored plain always
- * 'e': Value can be stored in "secondary" relation (if relation
- * has one, see pg_class.reltoastrelid)
- * 'm': Value can be stored compressed inline
- * 'x': Value can be stored compressed inline or in "secondary"
- * Note that 'm' fields can also be moved out to secondary storage,
- * but only as a last resort ('e' and 'x' fields are moved first).
- *----------
- */
- char attstorage;
- /*
- * attalign is a copy of the typalign field from pg_type for this
- * attribute. See atttypid comments above.
- */
- char attalign;
- /* This flag represents the "NOT NULL" constraint */
- bool attnotnull;
- /* Has DEFAULT value or not */
- bool atthasdef;
- /* Is dropped (ie, logically invisible) or not */
- bool attisdropped;
- /*
- * This flag specifies whether this column has ever had a local
- * definition. It is set for normal non-inherited columns, but also for
- * columns that are inherited from parents if also explicitly listed in
- * CREATE TABLE INHERITS. It is also set when inheritance is removed from
- * a table with ALTER TABLE NO INHERIT. If the flag is set, the column is
- * not dropped by a parent's DROP COLUMN even if this causes the column's
- * attinhcount to become zero.
- */
- bool attislocal;
- /* Number of times inherited from direct parent relation(s) */
- int32 attinhcount;
- /* attribute's collation */
- Oid attcollation;
- #ifdef CATALOG_VARLEN /* variable-length fields start here */
- /* NOTE: The following fields are not present in tuple descriptors. */
- /* Column-level access permissions */
- aclitem attacl[1];
- /* Column-level options */
- text attoptions[1];
- /* Column-level FDW options */
- text attfdwoptions[1];
- #endif
- } FormData_pg_attribute;
- /*
- * ATTRIBUTE_FIXED_PART_SIZE is the size of the fixed-layout,
- * guaranteed-not-null part of a pg_attribute row. This is in fact as much
- * of the row as gets copied into tuple descriptors, so don't expect you
- * can access fields beyond attcollation except in a real tuple!
- */
- #define ATTRIBUTE_FIXED_PART_SIZE \
- (offsetof(FormData_pg_attribute,attcollation) + sizeof(Oid))
- /* ----------------
- * Form_pg_attribute corresponds to a pointer to a tuple with
- * the format of pg_attribute relation.
- * ----------------
- */
- typedef FormData_pg_attribute *Form_pg_attribute;
- /* ----------------
- * compiler constants for pg_attribute
- * ----------------
- */
- #define Natts_pg_attribute 21
- #define Anum_pg_attribute_attrelid 1
- #define Anum_pg_attribute_attname 2
- #define Anum_pg_attribute_atttypid 3
- #define Anum_pg_attribute_attstattarget 4
- #define Anum_pg_attribute_attlen 5
- #define Anum_pg_attribute_attnum 6
- #define Anum_pg_attribute_attndims 7
- #define Anum_pg_attribute_attcacheoff 8
- #define Anum_pg_attribute_atttypmod 9
- #define Anum_pg_attribute_attbyval 10
- #define Anum_pg_attribute_attstorage 11
- #define Anum_pg_attribute_attalign 12
- #define Anum_pg_attribute_attnotnull 13
- #define Anum_pg_attribute_atthasdef 14
- #define Anum_pg_attribute_attisdropped 15
- #define Anum_pg_attribute_attislocal 16
- #define Anum_pg_attribute_attinhcount 17
- #define Anum_pg_attribute_attcollation 18
- #define Anum_pg_attribute_attacl 19
- #define Anum_pg_attribute_attoptions 20
- #define Anum_pg_attribute_attfdwoptions 21
- /* ----------------
- * initial contents of pg_attribute
- *
- * The initial contents of pg_attribute are generated at compile time by
- * genbki.pl. Only "bootstrapped" relations need be included.
- * ----------------
- */
- #endif /* PG_ATTRIBUTE_H */
|