123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /*-------------------------------------------------------------------------
- *
- * pg_attribute.h
- * definition of the "attribute" system catalog (pg_attribute)
- *
- * The initial contents of pg_attribute are generated at compile time by
- * genbki.pl, so there is no pg_attribute.dat file. Only "bootstrapped"
- * relations need be included.
- *
- *
- * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/include/catalog/pg_attribute.h
- *
- * NOTES
- * The Catalog.pm module reads this file and derives schema
- * information.
- *
- *-------------------------------------------------------------------------
- */
- #ifndef PG_ATTRIBUTE_H
- #define PG_ATTRIBUTE_H
- #include "catalog/genbki.h"
- #include "catalog/pg_attribute_d.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.
- * ----------------
- */
- CATALOG(pg_attribute,1249,AttributeRelationId) BKI_BOOTSTRAP BKI_ROWTYPE_OID(75,AttributeRelation_Rowtype_Id) BKI_SCHEMA_MACRO
- {
- Oid attrelid BKI_LOOKUP(pg_class); /* 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. In an entry for a dropped column, this field is set to zero
- * since the pg_type entry may no longer exist; but we rely on attlen,
- * attbyval, and attalign to still tell us how large the values in the
- * table are.
- */
- Oid atttypid BKI_LOOKUP_OPT(pg_type);
- /*
- * 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 BKI_DEFAULT(-1);
- /*
- * 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 BKI_DEFAULT(-1);
- /*
- * 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 BKI_DEFAULT(-1);
- /*
- * attbyval is a copy of the typbyval field from pg_type for this
- * attribute. See atttypid comments above.
- */
- bool attbyval;
- /*
- * attalign is a copy of the typalign field from pg_type for this
- * attribute. See atttypid comments above.
- */
- char attalign;
- /*----------
- * 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 as for pg_type.typstorage (see TYPSTORAGE macros).
- *----------
- */
- char attstorage;
- /*
- * attcompression sets the current compression method of the attribute.
- * Typically this is InvalidCompressionMethod ('\0') to specify use of the
- * current default setting (see default_toast_compression). Otherwise,
- * 'p' selects pglz compression, while 'l' selects LZ4 compression.
- * However, this field is ignored whenever attstorage does not allow
- * compression.
- */
- char attcompression BKI_DEFAULT('\0');
- /* This flag represents the "NOT NULL" constraint */
- bool attnotnull;
- /* Has DEFAULT value or not */
- bool atthasdef BKI_DEFAULT(f);
- /* Has a missing value or not */
- bool atthasmissing BKI_DEFAULT(f);
- /* One of the ATTRIBUTE_IDENTITY_* constants below, or '\0' */
- char attidentity BKI_DEFAULT('\0');
- /* One of the ATTRIBUTE_GENERATED_* constants below, or '\0' */
- char attgenerated BKI_DEFAULT('\0');
- /* Is dropped (ie, logically invisible) or not */
- bool attisdropped BKI_DEFAULT(f);
- /*
- * 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 BKI_DEFAULT(t);
- /* Number of times inherited from direct parent relation(s) */
- int32 attinhcount BKI_DEFAULT(0);
- /* attribute's collation, if any */
- Oid attcollation BKI_LOOKUP_OPT(pg_collation);
- #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] BKI_DEFAULT(_null_);
- /* Column-level options */
- text attoptions[1] BKI_DEFAULT(_null_);
- /* Column-level FDW options */
- text attfdwoptions[1] BKI_DEFAULT(_null_);
- /*
- * Missing value for added columns. This is a one element array which lets
- * us store a value of the attribute type here.
- */
- anyarray attmissingval BKI_DEFAULT(_null_);
- #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 the variable-length fields 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;
- DECLARE_UNIQUE_INDEX(pg_attribute_relid_attnam_index, 2658, AttributeRelidNameIndexId, on pg_attribute using btree(attrelid oid_ops, attname name_ops));
- DECLARE_UNIQUE_INDEX_PKEY(pg_attribute_relid_attnum_index, 2659, AttributeRelidNumIndexId, on pg_attribute using btree(attrelid oid_ops, attnum int2_ops));
- #ifdef EXPOSE_TO_CLIENT_CODE
- #define ATTRIBUTE_IDENTITY_ALWAYS 'a'
- #define ATTRIBUTE_IDENTITY_BY_DEFAULT 'd'
- #define ATTRIBUTE_GENERATED_STORED 's'
- #endif /* EXPOSE_TO_CLIENT_CODE */
- #endif /* PG_ATTRIBUTE_H */
|