syscache.c

来自「postgresql8.3.4源码,开源数据库」· C语言 代码 · 共 982 行 · 第 1/2 页

C
982
字号
/*------------------------------------------------------------------------- * * syscache.c *	  System cache management routines * * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION *	  $PostgreSQL: pgsql/src/backend/utils/cache/syscache.c,v 1.114 2008/01/01 19:45:53 momjian Exp $ * * NOTES *	  These routines allow the parser/planner/executor to perform *	  rapid lookups on the contents of the system catalogs. * *	  see catalog/syscache.h for a list of the cache id's * *------------------------------------------------------------------------- */#include "postgres.h"#include "access/heapam.h"#include "catalog/indexing.h"#include "catalog/pg_aggregate.h"#include "catalog/pg_amop.h"#include "catalog/pg_amproc.h"#include "catalog/pg_auth_members.h"#include "catalog/pg_authid.h"#include "catalog/pg_cast.h"#include "catalog/pg_constraint.h"#include "catalog/pg_conversion.h"#include "catalog/pg_database.h"#include "catalog/pg_enum.h"#include "catalog/pg_language.h"#include "catalog/pg_namespace.h"#include "catalog/pg_opclass.h"#include "catalog/pg_operator.h"#include "catalog/pg_opfamily.h"#include "catalog/pg_proc.h"#include "catalog/pg_rewrite.h"#include "catalog/pg_statistic.h"#include "catalog/pg_ts_config.h"#include "catalog/pg_ts_config_map.h"#include "catalog/pg_ts_dict.h"#include "catalog/pg_ts_parser.h"#include "catalog/pg_ts_template.h"#include "catalog/pg_type.h"#include "utils/syscache.h"/*---------------------------------------------------------------------------	Adding system caches:	Add your new cache to the list in include/utils/syscache.h.  Keep	the list sorted alphabetically and adjust the cache numbers	accordingly.	Add your entry to the cacheinfo[] array below. All cache lists are	alphabetical, so add it in the proper place.  Specify the relation OID,	index OID, number of keys, key attribute numbers, and number of hash	buckets.  If the relation contains tuples that are associated with a	particular relation (for example, its attributes, rules, triggers, etc)	then specify the attribute number that contains the OID of the associated	relation.  This is used by CatalogCacheFlushRelation() to remove the	correct tuples during a table drop or relcache invalidation event.	The number of hash buckets must be a power of 2.  It's reasonable to	set this to the number of entries that might be in the particular cache	in a medium-size database.	There must be a unique index underlying each syscache (ie, an index	whose key is the same as that of the cache).  If there is not one	already, add definitions for it to include/catalog/indexing.h: you need	to add a DECLARE_UNIQUE_INDEX macro and a #define for the index OID.	(Adding an index requires a catversion.h update, while simply	adding/deleting caches only requires a recompile.)	Finally, any place your relation gets heap_insert() or	heap_update() calls, make sure there is a CatalogUpdateIndexes() or	similar call.  The heap_* calls do not update indexes.	bjm 1999/11/22*---------------------------------------------------------------------------*//* *		struct cachedesc: information defining a single syscache */struct cachedesc{	Oid			reloid;			/* OID of the relation being cached */	Oid			indoid;			/* OID of index relation for this cache */	int			reloidattr;		/* attr number of rel OID reference, or 0 */	int			nkeys;			/* # of keys needed for cache lookup */	int			key[4];			/* attribute numbers of key attrs */	int			nbuckets;		/* number of hash buckets for this cache */};static const struct cachedesc cacheinfo[] = {	{AggregateRelationId,		/* AGGFNOID */		AggregateFnoidIndexId,		0,		1,		{			Anum_pg_aggregate_aggfnoid,			0,			0,			0		},		32	},	{AccessMethodRelationId,	/* AMNAME */		AmNameIndexId,		0,		1,		{			Anum_pg_am_amname,			0,			0,			0		},		4	},	{AccessMethodRelationId,	/* AMOID */		AmOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		4	},	{AccessMethodOperatorRelationId,	/* AMOPOPID */		AccessMethodOperatorIndexId,		0,		2,		{			Anum_pg_amop_amopopr,			Anum_pg_amop_amopfamily,			0,			0		},		64	},	{AccessMethodOperatorRelationId,	/* AMOPSTRATEGY */		AccessMethodStrategyIndexId,		0,		4,		{			Anum_pg_amop_amopfamily,			Anum_pg_amop_amoplefttype,			Anum_pg_amop_amoprighttype,			Anum_pg_amop_amopstrategy		},		64	},	{AccessMethodProcedureRelationId,	/* AMPROCNUM */		AccessMethodProcedureIndexId,		0,		4,		{			Anum_pg_amproc_amprocfamily,			Anum_pg_amproc_amproclefttype,			Anum_pg_amproc_amprocrighttype,			Anum_pg_amproc_amprocnum		},		64	},	{AttributeRelationId,		/* ATTNAME */		AttributeRelidNameIndexId,		Anum_pg_attribute_attrelid,		2,		{			Anum_pg_attribute_attrelid,			Anum_pg_attribute_attname,			0,			0		},		2048	},	{AttributeRelationId,		/* ATTNUM */		AttributeRelidNumIndexId,		Anum_pg_attribute_attrelid,		2,		{			Anum_pg_attribute_attrelid,			Anum_pg_attribute_attnum,			0,			0		},		2048	},	{AuthMemRelationId,			/* AUTHMEMMEMROLE */		AuthMemMemRoleIndexId,		0,		2,		{			Anum_pg_auth_members_member,			Anum_pg_auth_members_roleid,			0,			0		},		128	},	{AuthMemRelationId,			/* AUTHMEMROLEMEM */		AuthMemRoleMemIndexId,		0,		2,		{			Anum_pg_auth_members_roleid,			Anum_pg_auth_members_member,			0,			0		},		128	},	{AuthIdRelationId,			/* AUTHNAME */		AuthIdRolnameIndexId,		0,		1,		{			Anum_pg_authid_rolname,			0,			0,			0		},		128	},	{AuthIdRelationId,			/* AUTHOID */		AuthIdOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		128	},	{		CastRelationId,			/* CASTSOURCETARGET */		CastSourceTargetIndexId,		0,		2,		{			Anum_pg_cast_castsource,			Anum_pg_cast_casttarget,			0,			0		},		256	},	{OperatorClassRelationId,	/* CLAAMNAMENSP */		OpclassAmNameNspIndexId,		0,		3,		{			Anum_pg_opclass_opcmethod,			Anum_pg_opclass_opcname,			Anum_pg_opclass_opcnamespace,			0		},		64	},	{OperatorClassRelationId,	/* CLAOID */		OpclassOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		64	},	{ConversionRelationId,		/* CONDEFAULT */		ConversionDefaultIndexId,		0,		4,		{			Anum_pg_conversion_connamespace,			Anum_pg_conversion_conforencoding,			Anum_pg_conversion_contoencoding,			ObjectIdAttributeNumber,		},		128	},	{ConversionRelationId,		/* CONNAMENSP */		ConversionNameNspIndexId,		0,		2,		{			Anum_pg_conversion_conname,			Anum_pg_conversion_connamespace,			0,			0		},		128	},	{ConstraintRelationId,		/* CONSTROID */		ConstraintOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		1024	},	{ConversionRelationId,		/* CONVOID */		ConversionOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		128	},	{DatabaseRelationId,		/* DATABASEOID */		DatabaseOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		4	},	{EnumRelationId,			/* ENUMOID */		EnumOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		256	},	{EnumRelationId,			/* ENUMTYPOIDNAME */		EnumTypIdLabelIndexId,		0,		2,		{			Anum_pg_enum_enumtypid,			Anum_pg_enum_enumlabel,			0,			0		},		256	},	{IndexRelationId,			/* INDEXRELID */		IndexRelidIndexId,		Anum_pg_index_indrelid,		1,		{			Anum_pg_index_indexrelid,			0,			0,			0		},		1024	},	{LanguageRelationId,		/* LANGNAME */		LanguageNameIndexId,		0,		1,		{			Anum_pg_language_lanname,			0,			0,			0		},		4	},	{LanguageRelationId,		/* LANGOID */		LanguageOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		4	},	{NamespaceRelationId,		/* NAMESPACENAME */		NamespaceNameIndexId,		0,		1,		{			Anum_pg_namespace_nspname,			0,			0,			0		},		256	},	{NamespaceRelationId,		/* NAMESPACEOID */		NamespaceOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		256	},	{OperatorRelationId,		/* OPERNAMENSP */		OperatorNameNspIndexId,		0,		4,		{			Anum_pg_operator_oprname,			Anum_pg_operator_oprleft,			Anum_pg_operator_oprright,			Anum_pg_operator_oprnamespace		},		1024	},	{OperatorRelationId,		/* OPEROID */		OperatorOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		1024	},	{OperatorFamilyRelationId,	/* OPFAMILYAMNAMENSP */		OpfamilyAmNameNspIndexId,		0,		3,		{			Anum_pg_opfamily_opfmethod,			Anum_pg_opfamily_opfname,			Anum_pg_opfamily_opfnamespace,			0		},		64	},	{OperatorFamilyRelationId,	/* OPFAMILYOID */		OpfamilyOidIndexId,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0		},		64	},	{ProcedureRelationId,		/* PROCNAMEARGSNSP */		ProcedureNameArgsNspIndexId,		0,		3,		{			Anum_pg_proc_proname,			Anum_pg_proc_proargtypes,			Anum_pg_proc_pronamespace,			0		},		2048	},	{ProcedureRelationId,		/* PROCOID */		ProcedureOidIndexId,		0,		1,

⌨️ 快捷键说明

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