postgresql/src/include/utils/syscache.h

76 lines
2.0 KiB
C
Raw Normal View History

/*-------------------------------------------------------------------------
*
* syscache.h
* System catalog cache definitions.
*
* See also lsyscache.h, which provides convenience routines for
* common cache-lookup operations.
*
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: syscache.h,v 1.32 2001/08/10 18:57:41 tgl Exp $
*
*-------------------------------------------------------------------------
*/
#ifndef SYSCACHE_H
#define SYSCACHE_H
#include "access/htup.h"
1996-10-19 06:16:04 +02:00
/*
* Declarations for util/syscache.c.
*
* SysCache identifiers.
*
* The order of these must match the order
* they are entered into the structure cacheinfo[] in syscache.c.
* Keep them in alphabetical order.
*/
#define AGGNAME 0
#define AMNAME 1
#define AMOPOPID 2
#define AMOPSTRATEGY 3
#define ATTNAME 4
#define ATTNUM 5
#define CLADEFTYPE 6
#define CLANAME 7
#define GRONAME 8
#define GROSYSID 9
#define INDEXRELID 10
#define INHRELID 11
#define LANGNAME 12
#define LANGOID 13
Clean up various to-do items associated with system indexes: pg_database now has unique indexes on oid and on datname. pg_shadow now has unique indexes on usename and on usesysid. pg_am now has unique index on oid. pg_opclass now has unique index on oid. pg_amproc now has unique index on amid+amopclaid+amprocnum. Remove pg_rewrite's unnecessary index on oid, delete unused RULEOID syscache. Remove index on pg_listener and associated syscache for performance reasons (caching rows that are certain to change before you need 'em again is rather pointless). Change pg_attrdef's nonunique index on adrelid into a unique index on adrelid+adnum. Fix various incorrect settings of pg_class.relisshared, make that the primary reference point for whether a relation is shared or not. IsSharedSystemRelationName() is now only consulted to initialize relisshared during initial creation of tables and indexes. In theory we might now support shared user relations, though it's not clear how one would get entries for them into pg_class &etc of multiple databases. Fix recently reported bug that pg_attribute rows created for an index all have the same OID. (Proof that non-unique OID doesn't matter unless it's actually used to do lookups ;-)) There's no need to treat pg_trigger, pg_attrdef, pg_relcheck as bootstrap relations. Convert them into plain system catalogs without hardwired entries in pg_class and friends. Unify global.bki and template1.bki into a single init script postgres.bki, since the alleged distinction between them was misleading and pointless. Not to mention that it didn't work for setting up indexes on shared system relations. Rationalize locking of pg_shadow, pg_group, pg_attrdef (no need to use AccessExclusiveLock where ExclusiveLock or even RowExclusiveLock will do). Also, hold locks until transaction commit where necessary.
2001-06-12 07:55:50 +02:00
#define OPERNAME 14
#define OPEROID 15
#define PROCNAME 16
#define PROCOID 17
#define RELNAME 18
#define RELOID 19
#define RULENAME 20
#define SHADOWNAME 21
#define SHADOWSYSID 22
#define STATRELATT 23
#define TYPENAME 24
#define TYPEOID 25
extern void InitCatalogCache(void);
extern HeapTuple SearchSysCache(int cacheId,
2001-03-22 05:01:46 +01:00
Datum key1, Datum key2, Datum key3, Datum key4);
extern void ReleaseSysCache(HeapTuple tuple);
/* convenience routines */
extern HeapTuple SearchSysCacheCopy(int cacheId,
2001-03-22 05:01:46 +01:00
Datum key1, Datum key2, Datum key3, Datum key4);
extern bool SearchSysCacheExists(int cacheId,
Datum key1, Datum key2, Datum key3, Datum key4);
extern Oid GetSysCacheOid(int cacheId,
2001-03-22 05:01:46 +01:00
Datum key1, Datum key2, Datum key3, Datum key4);
extern Datum SysCacheGetAttr(int cacheId, HeapTuple tup,
AttrNumber attributeNumber, bool *isNull);
#endif /* SYSCACHE_H */