syscache.c

来自「PostgreSQL7.4.6 for Linux」· C语言 代码 · 共 731 行 · 第 1/2 页

C
731
字号
/*------------------------------------------------------------------------- * * syscache.c *	  System cache management routines * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION *	  $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.91 2003/09/24 18:54:01 tgl 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 "access/transam.h"#include "utils/builtins.h"#include "catalog/catname.h"#include "catalog/indexing.h"#include "catalog/pg_aggregate.h"#include "catalog/pg_amop.h"#include "catalog/pg_amproc.h"#include "catalog/pg_cast.h"#include "catalog/pg_conversion.h"#include "catalog/pg_group.h"#include "catalog/pg_index.h"#include "catalog/pg_inherits.h"#include "catalog/pg_language.h"#include "catalog/pg_namespace.h"#include "catalog/pg_opclass.h"#include "catalog/pg_operator.h"#include "catalog/pg_proc.h"#include "catalog/pg_rewrite.h"#include "catalog/pg_shadow.h"#include "catalog/pg_statistic.h"#include "catalog/pg_type.h"#include "utils/catcache.h"#include "utils/syscache.h"#include "miscadmin.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	name, index name, number of keys, and key attribute numbers.  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.	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 a #define for the index name and a DECLARE_UNIQUE_INDEX macro	with the actual declaration.  (This will require 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{	const char *name;			/* name of the relation being cached */	const char *indname;		/* name 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 */};static const struct cachedesc cacheinfo[] = {	{AggregateRelationName,		/* AGGFNOID */		AggregateFnoidIndex,		0,		1,		{			Anum_pg_aggregate_aggfnoid,			0,			0,			0	}},	{AccessMethodRelationName,	/* AMNAME */		AmNameIndex,		0,		1,		{			Anum_pg_am_amname,			0,			0,			0	}},	{AccessMethodRelationName,	/* AMOID */		AmOidIndex,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0	}},	{AccessMethodOperatorRelationName,	/* AMOPOPID */		AccessMethodOperatorIndex,		0,		2,		{			Anum_pg_amop_amopopr,			Anum_pg_amop_amopclaid,			0,			0	}},	{AccessMethodOperatorRelationName,	/* AMOPSTRATEGY */		AccessMethodStrategyIndex,		0,		2,		{			Anum_pg_amop_amopclaid,			Anum_pg_amop_amopstrategy,			0,			0	}},	{AccessMethodProcedureRelationName, /* AMPROCNUM */		AccessMethodProcedureIndex,		0,		2,		{			Anum_pg_amproc_amopclaid,			Anum_pg_amproc_amprocnum,			0,			0	}},	{AttributeRelationName,		/* ATTNAME */		AttributeRelidNameIndex,		Anum_pg_attribute_attrelid,		2,		{			Anum_pg_attribute_attrelid,			Anum_pg_attribute_attname,			0,			0	}},	{AttributeRelationName,		/* ATTNUM */		AttributeRelidNumIndex,		Anum_pg_attribute_attrelid,		2,		{			Anum_pg_attribute_attrelid,			Anum_pg_attribute_attnum,			0,			0	}},	{		CastRelationName,		/* CASTSOURCETARGET */		CastSourceTargetIndex,		0,		2,		{			Anum_pg_cast_castsource,			Anum_pg_cast_casttarget,			0,			0	}},	{OperatorClassRelationName, /* CLAAMNAMENSP */		OpclassAmNameNspIndex,		0,		3,		{			Anum_pg_opclass_opcamid,			Anum_pg_opclass_opcname,			Anum_pg_opclass_opcnamespace,			0	}},	{OperatorClassRelationName, /* CLAOID */		OpclassOidIndex,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0	}},	{ConversionRelationName,	/* CONDEFAULT */		ConversionDefaultIndex,		0,		4,		{			Anum_pg_conversion_connamespace,			Anum_pg_conversion_conforencoding,			Anum_pg_conversion_contoencoding,			ObjectIdAttributeNumber,	}},	{ConversionRelationName,	/* CONNAMENSP */		ConversionNameNspIndex,		0,		2,		{			Anum_pg_conversion_conname,			Anum_pg_conversion_connamespace,			0,			0	}},	{ConversionRelationName,	/* CONOID */		ConversionOidIndex,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0	}},	{GroupRelationName,			/* GRONAME */		GroupNameIndex,		0,		1,		{			Anum_pg_group_groname,			0,			0,			0	}},	{GroupRelationName,			/* GROSYSID */		GroupSysidIndex,		0,		1,		{			Anum_pg_group_grosysid,			0,			0,			0	}},	{IndexRelationName,			/* INDEXRELID */		IndexRelidIndex,		Anum_pg_index_indrelid,		1,		{			Anum_pg_index_indexrelid,			0,			0,			0	}},	{InheritsRelationName,		/* INHRELID */		InheritsRelidSeqnoIndex,		Anum_pg_inherits_inhrelid,		2,		{			Anum_pg_inherits_inhrelid,			Anum_pg_inherits_inhseqno,			0,			0	}},	{LanguageRelationName,		/* LANGNAME */		LanguageNameIndex,		0,		1,		{			Anum_pg_language_lanname,			0,			0,			0	}},	{LanguageRelationName,		/* LANGOID */		LanguageOidIndex,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0	}},	{NamespaceRelationName,		/* NAMESPACENAME */		NamespaceNameIndex,		0,		1,		{			Anum_pg_namespace_nspname,			0,			0,			0	}},	{NamespaceRelationName,		/* NAMESPACEOID */		NamespaceOidIndex,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0	}},	{OperatorRelationName,		/* OPERNAMENSP */		OperatorNameNspIndex,		0,		4,		{			Anum_pg_operator_oprname,			Anum_pg_operator_oprleft,			Anum_pg_operator_oprright,			Anum_pg_operator_oprnamespace	}},	{OperatorRelationName,		/* OPEROID */		OperatorOidIndex,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0	}},	{ProcedureRelationName,		/* PROCNAMENSP */		ProcedureNameNspIndex,		0,		4,		{			Anum_pg_proc_proname,			Anum_pg_proc_pronargs,			Anum_pg_proc_proargtypes,			Anum_pg_proc_pronamespace	}},	{ProcedureRelationName,		/* PROCOID */		ProcedureOidIndex,		0,		1,		{			ObjectIdAttributeNumber,			0,			0,			0	}},	{RelationRelationName,		/* RELNAMENSP */		ClassNameNspIndex,		ObjectIdAttributeNumber,		2,		{			Anum_pg_class_relname,			Anum_pg_class_relnamespace,			0,			0	}},

⌨️ 快捷键说明

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