⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pg_attribute.h

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 H
📖 第 1 页 / 共 2 页
字号:
/*------------------------------------------------------------------------- * * pg_attribute.h *	  definition of the system "attribute" relation (pg_attribute) *	  along with the relation's initial contents. * * * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * $PostgreSQL: pgsql/src/include/catalog/pg_attribute.h,v 1.119 2005/10/15 02:49:42 momjian Exp $ * * NOTES *	  the genbki.sh script reads this file and generates .bki *	  information from the DATA() statements. * *	  utils/cache/relcache.c requires 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 definitions and the *		CATALOG(), BKI_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 catalog/heap.c also. * ---------------- */#define AttributeRelationId  1249CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS{	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.	 */	int4		attstattarget;	/*	 * attlen is a copy of the typlen field from pg_type for this attribute.	 * See atttypid comments above.	 */	int2		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.	 */	int2		attnum;	/*	 * attndims is the declared number of dimensions, if an array type,	 * otherwise zero.	 */	int4		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.	 */	int4		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.	 */	int4		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;	/* Has a local definition (hence, do not drop when attinhcount is 0) */	bool		attislocal;	/* Number of times inherited from direct parent relation(s) */	int4		attinhcount;} 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 * because of alignment padding at the end of the struct.) */#define ATTRIBUTE_TUPLE_SIZE \	(offsetof(FormData_pg_attribute,attinhcount) + sizeof(int4))/* ---------------- *		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				17#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/* ---------------- *		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 * * NOTE: only "bootstrapped" relations need to be declared here. * * NOTE: if changing pg_attribute column set, also see the hard-coded * entries for system attributes in catalog/heap.c. * ---------------- *//* ---------------- *		pg_type * ---------------- */#define Schema_pg_type \{ 1247, {"typname"},	   19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', 'i', true, false, false, true, 0 }, \{ 1247, {"typnamespace"},  26, -1,	4,	2, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \{ 1247, {"typowner"},	   26, -1,	4,	3, 0, -1, -1, true, 'p', 'i', true, false, false, true, 0 }, \{ 1247, {"typlen"},		   21, -1,	2,	4, 0, -1, -1, true, 'p', 's', true, false, false, true, 0 }, \{ 1247, {"typbyval"},	   16, -1,	1,	5, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \{ 1247, {"typtype"},	   18, -1,	1,	6, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \{ 1247, {"typisdefined"},  16, -1,	1,	7, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \{ 1247, {"typdelim"},	   18, -1,	1,	8, 0, -1, -1, true, 'p', 'c', true, false, false, true, 0 }, \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -