📄 pg_attribute.h
字号:
/*------------------------------------------------------------------------- * * pg_attribute.h * definition of the system "attribute" relation (pg_attribute) * along with the relation's initial contents. * * * Copyright (c) 1994, Regents of the University of California * * $Id: pg_attribute.h,v 1.47 1999/05/25 16:13:42 momjian Exp $ * * NOTES * the genbki.sh script reads this file and generates .bki * information from the DATA() statements. * * utils/cache/relcache.c requires some hard-coded tuple descriptors * for some of the system catalogs so if the schema for any of * these changes, be sure and change the appropriate Schema_xxx * macros! -cim 2/5/91 * *------------------------------------------------------------------------- */#ifndef PG_ATTRIBUTE_H#define PG_ATTRIBUTE_H/* ---------------- * postgres.h contains the system type definintions and the * CATALOG(), BOOTSTRAP and DATA() sugar words so this file * can be read by both genbki.sh and the C compiler. * ---------------- *//* ---------------- * 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 heap.c and index.c also. * ---------------- */CATALOG(pg_attribute) BOOTSTRAP{ Oid attrelid; NameData attname; Oid atttypid; /* * 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. */ float4 attdisbursion; int2 attlen; /* * attlen is a copy of the typlen field from pg_type for this * attribute. See atttypid above. See struct Form_pg_type for * definition. */ int2 attnum; /* * 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. */ int4 attnelems; int4 attcacheoff; /* * fastgetattr() uses attcacheoff to cache byte offsets of attributes * in heap tuples. The data 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. */ int4 atttypmod; /* * atttypmod records type-specific modifications supplied at table * creation time, and passes it to input and output functions as the * third argument. */ bool attbyval; /* * attbyval is a copy of the typbyval field from pg_type for this * attribute. See atttypid above. See struct Form_pg_type for * definition. */ bool attisset; char attalign; /* * attalign is a copy of the typalign field from pg_type for this * attribute. See atttypid above. See struct Form_pg_type for * definition. */ bool attnotnull; /* This flag represents the "NOT NULL" constraint */ bool atthasdef; /* Has DEFAULT value or not */} FormData_pg_attribute;/* * someone should figure out how to do this properly. (The problem is * the size of the C struct is not the same as the size of the tuple.) */#define ATTRIBUTE_TUPLE_SIZE \ (offsetof(FormData_pg_attribute,atthasdef) + sizeof(char))/* ---------------- * 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 14#define Anum_pg_attribute_attrelid 1#define Anum_pg_attribute_attname 2#define Anum_pg_attribute_atttypid 3#define Anum_pg_attribute_attdisbursion 4#define Anum_pg_attribute_attlen 5#define Anum_pg_attribute_attnum 6#define Anum_pg_attribute_attnelems 7#define Anum_pg_attribute_attcacheoff 8#define Anum_pg_attribute_atttypmod 9#define Anum_pg_attribute_attbyval 10#define Anum_pg_attribute_attisset 11#define Anum_pg_attribute_attalign 12#define Anum_pg_attribute_attnotnull 13#define Anum_pg_attribute_atthasdef 14/* ---------------- * SCHEMA_ macros for declaring hardcoded tuple descriptors. * these are used in utils/cache/relcache.c * ----------------#define SCHEMA_NAME(x) CppConcat(Name_,x)#define SCHEMA_DESC(x) CppConcat(Desc_,x)#define SCHEMA_NATTS(x) CppConcat(Natts_,x)#define SCHEMA_DEF(x) \ FormData_pg_attribute \ SCHEMA_DESC(x) [ SCHEMA_NATTS(x) ] = \ { \ CppConcat(Schema_,x) \ } *//* ---------------- * initial contents of pg_attribute * ---------------- *//* ---------------- * pg_type schema * ---------------- */#define Schema_pg_type \{ 1247, {"typname"}, 19, 0, NAMEDATALEN, 1, 0, -1, -1, '\0', '\0', 'i', '\0', '\0' }, \{ 1247, {"typowner"}, 23, 0, 4, 2, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \{ 1247, {"typlen"}, 21, 0, 2, 3, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \{ 1247, {"typprtlen"}, 21, 0, 2, 4, 0, -1, -1, '\001', '\0', 's', '\0', '\0' }, \{ 1247, {"typbyval"}, 16, 0, 1, 5, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \{ 1247, {"typtype"}, 18, 0, 1, 6, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \{ 1247, {"typisdefined"}, 16, 0, 1, 7, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \{ 1247, {"typdelim"}, 18, 0, 1, 8, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \{ 1247, {"typrelid"}, 26, 0, 4, 9, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \{ 1247, {"typelem"}, 26, 0, 4, 10, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \{ 1247, {"typinput"}, 24, 0, 4, 11, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \{ 1247, {"typoutput"}, 24, 0, 4, 12, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \{ 1247, {"typreceive"}, 24, 0, 4, 13, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \{ 1247, {"typsend"}, 24, 0, 4, 14, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \{ 1247, {"typalign"}, 18, 0, 1, 15, 0, -1, -1, '\001', '\0', 'c', '\0', '\0' }, \{ 1247, {"typdefault"}, 25, 0, -1, 16, 0, -1, -1, '\0' , '\0', 'i', '\0', '\0' }DATA(insert OID = 0 ( 1247 typname 19 0 NAMEDATALEN 1 0 -1 -1 f f i f f));DATA(insert OID = 0 ( 1247 typowner 23 0 4 2 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 typlen 21 0 2 3 0 -1 -1 t f s f f));DATA(insert OID = 0 ( 1247 typprtlen 21 0 2 4 0 -1 -1 t f s f f));DATA(insert OID = 0 ( 1247 typbyval 16 0 1 5 0 -1 -1 t f c f f));DATA(insert OID = 0 ( 1247 typtype 18 0 1 6 0 -1 -1 t f c f f));DATA(insert OID = 0 ( 1247 typisdefined 16 0 1 7 0 -1 -1 t f c f f));DATA(insert OID = 0 ( 1247 typdelim 18 0 1 8 0 -1 -1 t f c f f));DATA(insert OID = 0 ( 1247 typrelid 26 0 4 9 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 typelem 26 0 4 10 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 typinput 24 0 4 11 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 typoutput 24 0 4 12 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 typreceive 24 0 4 13 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 typsend 24 0 4 14 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 typalign 18 0 1 15 0 -1 -1 t f c f f));DATA(insert OID = 0 ( 1247 typdefault 25 0 -1 16 0 -1 -1 f f i f f));DATA(insert OID = 0 ( 1247 ctid 27 0 6 -1 0 -1 -1 f f i f f));DATA(insert OID = 0 ( 1247 oid 26 0 4 -2 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 xmin 28 0 4 -3 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 cmin 29 0 4 -4 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 xmax 28 0 4 -5 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1247 cmax 29 0 4 -6 0 -1 -1 t f i f f));/* ---------------- * pg_database * ---------------- */DATA(insert OID = 0 ( 1262 datname 19 0 NAMEDATALEN 1 0 -1 -1 f f i f f));DATA(insert OID = 0 ( 1262 datdba 23 0 4 2 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1262 encoding 23 0 4 3 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1262 datpath 25 0 -1 4 0 -1 -1 f f i f f));DATA(insert OID = 0 ( 1262 ctid 27 0 6 -1 0 -1 -1 f f i f f));DATA(insert OID = 0 ( 1262 oid 26 0 4 -2 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1262 xmin 28 0 4 -3 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1262 cmin 29 0 4 -4 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1262 xmax 28 0 4 -5 0 -1 -1 t f i f f));DATA(insert OID = 0 ( 1262 cmax 29 0 4 -6 0 -1 -1 t f i f f));/* ---------------- * pg_proc * ---------------- */#define Schema_pg_proc \{ 1255, {"proname"}, 19, 0, NAMEDATALEN, 1, 0, -1, -1, '\0', '\0', 'i', '\0', '\0' }, \{ 1255, {"proowner"}, 23, 0, 4, 2, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \{ 1255, {"prolang"}, 26, 0, 4, 3, 0, -1, -1, '\001', '\0', 'i', '\0', '\0' }, \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -