diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2001-06-12 05:55:50 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2001-06-12 05:55:50 +0000 |
| commit | 1d584f97b9bfe1501f9d2bc5528e7818fa73c235 (patch) | |
| tree | 59a1a520e2a31718257ca9fa58f7819c8b321ac8 /src/include/catalog/indexing.h | |
| parent | d2c8358188cc6710e80800827cbb555600fd4b4d (diff) | |
| download | postgresql-1d584f97b9bfe1501f9d2bc5528e7818fa73c235.tar.gz | |
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.
Diffstat (limited to 'src/include/catalog/indexing.h')
| -rw-r--r-- | src/include/catalog/indexing.h | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/src/include/catalog/indexing.h b/src/include/catalog/indexing.h index cc155cf1bb..496ba4eaa3 100644 --- a/src/include/catalog/indexing.h +++ b/src/include/catalog/indexing.h @@ -8,7 +8,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: indexing.h,v 1.49 2001/05/07 00:43:24 tgl Exp $ + * $Id: indexing.h,v 1.50 2001/06/12 05:55:50 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -21,23 +21,24 @@ * Number of indices that exist for each system catalog */ #define Num_pg_aggregate_indices 1 -#define Num_pg_am_indices 1 +#define Num_pg_am_indices 2 #define Num_pg_amop_indices 2 +#define Num_pg_amproc_indices 1 #define Num_pg_attr_indices 2 #define Num_pg_attrdef_indices 1 #define Num_pg_class_indices 2 +#define Num_pg_database_indices 2 #define Num_pg_description_indices 1 #define Num_pg_group_indices 2 #define Num_pg_index_indices 2 #define Num_pg_inherits_indices 1 #define Num_pg_language_indices 2 #define Num_pg_largeobject_indices 1 -#define Num_pg_listener_indices 1 -#define Num_pg_opclass_indices 2 +#define Num_pg_opclass_indices 3 #define Num_pg_operator_indices 2 #define Num_pg_proc_indices 2 #define Num_pg_relcheck_indices 1 -#define Num_pg_rewrite_indices 2 +#define Num_pg_rewrite_indices 1 #define Num_pg_shadow_indices 2 #define Num_pg_statistic_indices 1 #define Num_pg_trigger_indices 3 @@ -48,13 +49,17 @@ */ #define AccessMethodOpidIndex "pg_amop_opid_index" #define AccessMethodStrategyIndex "pg_amop_strategy_index" +#define AccessProcedureIndex "pg_amproc_am_opcl_procnum_index" #define AggregateNameTypeIndex "pg_aggregate_name_type_index" #define AmNameIndex "pg_am_name_index" -#define AttrDefaultIndex "pg_attrdef_adrelid_index" +#define AmOidIndex "pg_am_oid_index" +#define AttrDefaultIndex "pg_attrdef_adrelid_adnum_index" #define AttributeRelidNameIndex "pg_attribute_relid_attnam_index" #define AttributeRelidNumIndex "pg_attribute_relid_attnum_index" #define ClassNameIndex "pg_class_relname_index" #define ClassOidIndex "pg_class_oid_index" +#define DatabaseNameIndex "pg_database_datname_index" +#define DatabaseOidIndex "pg_database_oid_index" #define DescriptionObjIndex "pg_description_objoid_index" #define GroupNameIndex "pg_group_name_index" #define GroupSysidIndex "pg_group_sysid_index" @@ -64,18 +69,17 @@ #define LanguageNameIndex "pg_language_name_index" #define LanguageOidIndex "pg_language_oid_index" #define LargeObjectLOidPNIndex "pg_largeobject_loid_pn_index" -#define ListenerPidRelnameIndex "pg_listener_pid_relname_index" #define OpclassDeftypeIndex "pg_opclass_deftype_index" #define OpclassNameIndex "pg_opclass_name_index" +#define OpclassOidIndex "pg_opclass_oid_index" #define OperatorNameIndex "pg_operator_oprname_l_r_k_index" #define OperatorOidIndex "pg_operator_oid_index" #define ProcedureNameIndex "pg_proc_proname_narg_type_index" #define ProcedureOidIndex "pg_proc_oid_index" #define RelCheckIndex "pg_relcheck_rcrelid_index" -#define RewriteOidIndex "pg_rewrite_oid_index" #define RewriteRulenameIndex "pg_rewrite_rulename_index" -#define ShadowNameIndex "pg_shadow_name_index" -#define ShadowSysidIndex "pg_shadow_sysid_index" +#define ShadowNameIndex "pg_shadow_usename_index" +#define ShadowSysidIndex "pg_shadow_usesysid_index" #define StatisticRelidAttnumIndex "pg_statistic_relid_att_index" #define TriggerConstrNameIndex "pg_trigger_tgconstrname_index" #define TriggerConstrRelidIndex "pg_trigger_tgconstrrelid_index" @@ -83,19 +87,21 @@ #define TypeNameIndex "pg_type_typname_index" #define TypeOidIndex "pg_type_oid_index" +/* Arrays of names of indices for each system catalog */ extern char *Name_pg_aggregate_indices[]; extern char *Name_pg_am_indices[]; extern char *Name_pg_amop_indices[]; +extern char *Name_pg_amproc_indices[]; extern char *Name_pg_attr_indices[]; extern char *Name_pg_attrdef_indices[]; extern char *Name_pg_class_indices[]; +extern char *Name_pg_database_indices[]; extern char *Name_pg_description_indices[]; extern char *Name_pg_group_indices[]; extern char *Name_pg_index_indices[]; extern char *Name_pg_inherits_indices[]; extern char *Name_pg_language_indices[]; extern char *Name_pg_largeobject_indices[]; -extern char *Name_pg_listener_indices[]; extern char *Name_pg_opclass_indices[]; extern char *Name_pg_operator_indices[]; extern char *Name_pg_proc_indices[]; @@ -107,8 +113,6 @@ extern char *Name_pg_trigger_indices[]; extern char *Name_pg_type_indices[]; -extern char *IndexedCatalogNames[]; - /* * indexing.c prototypes */ @@ -128,23 +132,35 @@ extern HeapTuple ClassOidIndexScan(Relation heapRelation, Datum relId); /* + * These macros are just to keep the C compiler from spitting up on the + * upcoming commands for genbki.sh. + */ +#define DECLARE_INDEX(x) extern int errno +#define DECLARE_UNIQUE_INDEX(x) extern int errno +#define BUILD_INDICES + + +/* * What follows are lines processed by genbki.sh to create the statements * the bootstrap parser will turn into DefineIndex commands. * - * The keyword is DECLARE_INDEX every thing after that is just like in a - * normal specification of the 'define index' POSTQUEL command. + * The keyword is DECLARE_INDEX or DECLARE_UNIQUE_INDEX. Everything after + * that is just like in a normal 'create index' SQL command. */ DECLARE_UNIQUE_INDEX(pg_aggregate_name_type_index on pg_aggregate using btree(aggname name_ops, aggbasetype oid_ops)); DECLARE_UNIQUE_INDEX(pg_am_name_index on pg_am using btree(amname name_ops)); +DECLARE_UNIQUE_INDEX(pg_am_oid_index on pg_am using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_amop_opid_index on pg_amop using btree(amopclaid oid_ops, amopopr oid_ops, amopid oid_ops)); DECLARE_UNIQUE_INDEX(pg_amop_strategy_index on pg_amop using btree(amopid oid_ops, amopclaid oid_ops, amopstrategy int2_ops)); -/* This following index is not used for a cache and is not unique */ -DECLARE_INDEX(pg_attrdef_adrelid_index on pg_attrdef using btree(adrelid oid_ops)); +DECLARE_UNIQUE_INDEX(pg_amproc_am_opcl_procnum_index on pg_amproc using btree(amid oid_ops, amopclaid oid_ops, amprocnum int2_ops)); +DECLARE_UNIQUE_INDEX(pg_attrdef_adrelid_adnum_index on pg_attrdef using btree(adrelid oid_ops, adnum int2_ops)); DECLARE_UNIQUE_INDEX(pg_attribute_relid_attnam_index on pg_attribute using btree(attrelid oid_ops, attname name_ops)); DECLARE_UNIQUE_INDEX(pg_attribute_relid_attnum_index on pg_attribute using btree(attrelid oid_ops, attnum int2_ops)); DECLARE_UNIQUE_INDEX(pg_class_oid_index on pg_class using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_class_relname_index on pg_class using btree(relname name_ops)); +DECLARE_UNIQUE_INDEX(pg_database_datname_index on pg_database using btree(datname name_ops)); +DECLARE_UNIQUE_INDEX(pg_database_oid_index on pg_database using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_description_objoid_index on pg_description using btree(objoid oid_ops)); DECLARE_UNIQUE_INDEX(pg_group_name_index on pg_group using btree(groname name_ops)); DECLARE_UNIQUE_INDEX(pg_group_sysid_index on pg_group using btree(grosysid int4_ops)); @@ -155,22 +171,19 @@ DECLARE_UNIQUE_INDEX(pg_inherits_relid_seqno_index on pg_inherits using btree(in DECLARE_UNIQUE_INDEX(pg_language_name_index on pg_language using btree(lanname name_ops)); DECLARE_UNIQUE_INDEX(pg_language_oid_index on pg_language using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_largeobject_loid_pn_index on pg_largeobject using btree(loid oid_ops, pageno int4_ops)); -DECLARE_UNIQUE_INDEX(pg_listener_pid_relname_index on pg_listener using btree(listenerpid int4_ops, relname name_ops)); /* This column needs to allow multiple zero entries, but is in the cache */ DECLARE_INDEX(pg_opclass_deftype_index on pg_opclass using btree(opcdeftype oid_ops)); DECLARE_UNIQUE_INDEX(pg_opclass_name_index on pg_opclass using btree(opcname name_ops)); +DECLARE_UNIQUE_INDEX(pg_opclass_oid_index on pg_opclass using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_operator_oid_index on pg_operator using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_operator_oprname_l_r_k_index on pg_operator using btree(oprname name_ops, oprleft oid_ops, oprright oid_ops, oprkind char_ops)); DECLARE_UNIQUE_INDEX(pg_proc_oid_index on pg_proc using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_proc_proname_narg_type_index on pg_proc using btree(proname name_ops, pronargs int2_ops, proargtypes oidvector_ops)); /* This following index is not used for a cache and is not unique */ DECLARE_INDEX(pg_relcheck_rcrelid_index on pg_relcheck using btree(rcrelid oid_ops)); -DECLARE_UNIQUE_INDEX(pg_rewrite_oid_index on pg_rewrite using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_rewrite_rulename_index on pg_rewrite using btree(rulename name_ops)); -/* -xDECLARE_UNIQUE_INDEX(pg_shadow_name_index on pg_shadow using btree(usename name_ops)); -xDECLARE_UNIQUE_INDEX(pg_shadow_sysid_index on pg_shadow using btree(usesysid int4_ops)); -*/ +DECLARE_UNIQUE_INDEX(pg_shadow_usename_index on pg_shadow using btree(usename name_ops)); +DECLARE_UNIQUE_INDEX(pg_shadow_usesysid_index on pg_shadow using btree(usesysid int4_ops)); DECLARE_UNIQUE_INDEX(pg_statistic_relid_att_index on pg_statistic using btree(starelid oid_ops, staattnum int2_ops)); DECLARE_INDEX(pg_trigger_tgconstrname_index on pg_trigger using btree(tgconstrname name_ops)); DECLARE_INDEX(pg_trigger_tgconstrrelid_index on pg_trigger using btree(tgconstrrelid oid_ops)); @@ -178,7 +191,7 @@ DECLARE_INDEX(pg_trigger_tgrelid_index on pg_trigger using btree(tgrelid oid_ops DECLARE_UNIQUE_INDEX(pg_type_oid_index on pg_type using btree(oid oid_ops)); DECLARE_UNIQUE_INDEX(pg_type_typname_index on pg_type using btree(typname name_ops)); -/* now build indices in the initialization scripts */ +/* last step of initialization script: build the indices declared above */ BUILD_INDICES #endif /* INDEXING_H */ |
