Re-order pg_listener index so it can later be used in an index scan.
This commit is contained in:
parent
75b950f668
commit
7d301947e5
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.63 2000/06/07 02:44:35 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.64 2000/06/07 04:09:33 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -51,7 +51,7 @@ char *Name_pg_inherits_indices[Num_pg_inherits_indices] =
|
|||||||
char *Name_pg_language_indices[Num_pg_language_indices] =
|
char *Name_pg_language_indices[Num_pg_language_indices] =
|
||||||
{LanguageOidIndex, LanguageNameIndex};
|
{LanguageOidIndex, LanguageNameIndex};
|
||||||
char *Name_pg_listener_indices[Num_pg_listener_indices] =
|
char *Name_pg_listener_indices[Num_pg_listener_indices] =
|
||||||
{ListenerRelnamePidIndex};
|
{ListenerPidRelnameIndex};
|
||||||
char *Name_pg_opclass_indices[Num_pg_opclass_indices] =
|
char *Name_pg_opclass_indices[Num_pg_opclass_indices] =
|
||||||
{OpclassNameIndex, OpclassDeftypeIndex};
|
{OpclassNameIndex, OpclassDeftypeIndex};
|
||||||
char *Name_pg_operator_indices[Num_pg_operator_indices] =
|
char *Name_pg_operator_indices[Num_pg_operator_indices] =
|
||||||
@ -653,7 +653,7 @@ LanguageOidIndexScan(Relation heapRelation, Oid lanId)
|
|||||||
|
|
||||||
|
|
||||||
HeapTuple
|
HeapTuple
|
||||||
ListenerRelnamePidIndexScan(Relation heapRelation, char *relName, int4 pid)
|
ListenerPidRelnameIndexScan(Relation heapRelation, int4 pid, char *relName)
|
||||||
{
|
{
|
||||||
Relation idesc;
|
Relation idesc;
|
||||||
ScanKeyData skey[2];
|
ScanKeyData skey[2];
|
||||||
@ -662,16 +662,16 @@ ListenerRelnamePidIndexScan(Relation heapRelation, char *relName, int4 pid)
|
|||||||
ScanKeyEntryInitialize(&skey[0],
|
ScanKeyEntryInitialize(&skey[0],
|
||||||
(bits16) 0x0,
|
(bits16) 0x0,
|
||||||
(AttrNumber) 1,
|
(AttrNumber) 1,
|
||||||
(RegProcedure) F_NAMEEQ,
|
(RegProcedure) F_INT4EQ,
|
||||||
PointerGetDatum(relName));
|
Int32GetDatum(pid));
|
||||||
|
|
||||||
ScanKeyEntryInitialize(&skey[1],
|
ScanKeyEntryInitialize(&skey[1],
|
||||||
(bits16) 0x0,
|
(bits16) 0x0,
|
||||||
(AttrNumber) 2,
|
(AttrNumber) 2,
|
||||||
(RegProcedure) F_INT4EQ,
|
(RegProcedure) F_NAMEEQ,
|
||||||
Int32GetDatum(pid));
|
PointerGetDatum(relName));
|
||||||
|
|
||||||
idesc = index_openr(ListenerRelnamePidIndex);
|
idesc = index_openr(ListenerPidRelnameIndex);
|
||||||
tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 2);
|
tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 2);
|
||||||
|
|
||||||
index_close(idesc);
|
index_close(idesc);
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.63 2000/06/04 01:44:29 petere Exp $
|
* $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.64 2000/06/07 04:09:34 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -159,7 +159,6 @@ Async_Notify(char *relname)
|
|||||||
/* no point in making duplicate entries in the list ... */
|
/* no point in making duplicate entries in the list ... */
|
||||||
if (!AsyncExistsPendingNotify(relname))
|
if (!AsyncExistsPendingNotify(relname))
|
||||||
{
|
{
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We allocate list memory from the global malloc pool to ensure
|
* We allocate list memory from the global malloc pool to ensure
|
||||||
* that it will live until we want to use it. This is probably
|
* that it will live until we want to use it. This is probably
|
||||||
@ -202,7 +201,6 @@ Async_Listen(char *relname, int pid)
|
|||||||
Datum d;
|
Datum d;
|
||||||
int i;
|
int i;
|
||||||
bool isnull;
|
bool isnull;
|
||||||
int alreadyListener = 0;
|
|
||||||
TupleDesc tupDesc;
|
TupleDesc tupDesc;
|
||||||
|
|
||||||
if (Trace_notify)
|
if (Trace_notify)
|
||||||
@ -212,25 +210,12 @@ Async_Listen(char *relname, int pid)
|
|||||||
tdesc = RelationGetDescr(lRel);
|
tdesc = RelationGetDescr(lRel);
|
||||||
|
|
||||||
/* Detect whether we are already listening on this relname */
|
/* Detect whether we are already listening on this relname */
|
||||||
scan = heap_beginscan(lRel, 0, SnapshotNow, 0, (ScanKey) NULL);
|
tuple = SearchSysCacheTuple(LISTENREL, Int32GetDatum(pid),
|
||||||
while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
|
PointerGetDatum(relname),
|
||||||
{
|
0, 0);
|
||||||
d = heap_getattr(tuple, Anum_pg_listener_relname, tdesc, &isnull);
|
if (tuple != NULL)
|
||||||
if (!strncmp((char *) DatumGetPointer(d), relname, NAMEDATALEN))
|
|
||||||
{
|
|
||||||
d = heap_getattr(tuple, Anum_pg_listener_pid, tdesc, &isnull);
|
|
||||||
if (DatumGetInt32(d) == pid)
|
|
||||||
{
|
|
||||||
alreadyListener = 1;
|
|
||||||
/* No need to scan the rest of the table */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
heap_endscan(scan);
|
|
||||||
|
|
||||||
if (alreadyListener)
|
|
||||||
{
|
{
|
||||||
|
/* No need to scan the rest of the table */
|
||||||
heap_close(lRel, AccessExclusiveLock);
|
heap_close(lRel, AccessExclusiveLock);
|
||||||
elog(NOTICE, "Async_Listen: We are already listening on %s", relname);
|
elog(NOTICE, "Async_Listen: We are already listening on %s", relname);
|
||||||
return;
|
return;
|
||||||
@ -313,9 +298,9 @@ Async_Unlisten(char *relname, int pid)
|
|||||||
|
|
||||||
lRel = heap_openr(ListenerRelationName, AccessExclusiveLock);
|
lRel = heap_openr(ListenerRelationName, AccessExclusiveLock);
|
||||||
/* Note we assume there can be only one matching tuple. */
|
/* Note we assume there can be only one matching tuple. */
|
||||||
lTuple = SearchSysCacheTuple(LISTENREL, PointerGetDatum(relname),
|
lTuple = SearchSysCacheTuple(LISTENREL, Int32GetDatum(pid),
|
||||||
Int32GetDatum(pid),
|
PointerGetDatum(relname),
|
||||||
0, 0);
|
0, 0);
|
||||||
if (lTuple != NULL)
|
if (lTuple != NULL)
|
||||||
heap_delete(lRel, &lTuple->t_self, NULL);
|
heap_delete(lRel, &lTuple->t_self, NULL);
|
||||||
heap_close(lRel, AccessExclusiveLock);
|
heap_close(lRel, AccessExclusiveLock);
|
||||||
|
8
src/backend/utils/cache/syscache.c
vendored
8
src/backend/utils/cache/syscache.c
vendored
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.52 2000/06/07 02:44:37 momjian Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.53 2000/06/07 04:09:36 momjian Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* These routines allow the parser/planner/executor to perform
|
* These routines allow the parser/planner/executor to perform
|
||||||
@ -241,14 +241,14 @@ static struct cachedesc cacheinfo[] = {
|
|||||||
{ListenerRelationName, /* LISTENREL */
|
{ListenerRelationName, /* LISTENREL */
|
||||||
2,
|
2,
|
||||||
{
|
{
|
||||||
Anum_pg_listener_relname,
|
|
||||||
Anum_pg_listener_pid,
|
Anum_pg_listener_pid,
|
||||||
|
Anum_pg_listener_relname,
|
||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
},
|
},
|
||||||
sizeof(FormData_pg_listener),
|
sizeof(FormData_pg_listener),
|
||||||
ListenerRelnamePidIndex,
|
ListenerPidRelnameIndex,
|
||||||
ListenerRelnamePidIndexScan},
|
ListenerPidRelnameIndexScan},
|
||||||
{OperatorRelationName, /* OPERNAME */
|
{OperatorRelationName, /* OPERNAME */
|
||||||
4,
|
4,
|
||||||
{
|
{
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: catversion.h,v 1.25 2000/06/07 03:02:08 momjian Exp $
|
* $Id: catversion.h,v 1.26 2000/06/07 04:09:44 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -53,6 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 200006061
|
#define CATALOG_VERSION_NO 200006071
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: indexing.h,v 1.38 2000/06/07 02:44:40 momjian Exp $
|
* $Id: indexing.h,v 1.39 2000/06/07 04:09:44 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -63,7 +63,7 @@
|
|||||||
#define InheritsRelidSeqnoIndex "pg_inherits_relid_seqno_index"
|
#define InheritsRelidSeqnoIndex "pg_inherits_relid_seqno_index"
|
||||||
#define LanguageNameIndex "pg_language_name_index"
|
#define LanguageNameIndex "pg_language_name_index"
|
||||||
#define LanguageOidIndex "pg_language_oid_index"
|
#define LanguageOidIndex "pg_language_oid_index"
|
||||||
#define ListenerRelnamePidIndex "pg_listener_relname_pid_index"
|
#define ListenerPidRelnameIndex "pg_listener_pid_relname_index"
|
||||||
#define OpclassDeftypeIndex "pg_opclass_deftype_index"
|
#define OpclassDeftypeIndex "pg_opclass_deftype_index"
|
||||||
#define OpclassNameIndex "pg_opclass_name_index"
|
#define OpclassNameIndex "pg_opclass_name_index"
|
||||||
#define OperatorNameIndex "pg_operator_oprname_l_r_k_index"
|
#define OperatorNameIndex "pg_operator_oprname_l_r_k_index"
|
||||||
@ -141,7 +141,7 @@ extern HeapTuple InheritsRelidSeqnoIndexScan(Relation heapRelation, Oid relid,
|
|||||||
int4 seqno);
|
int4 seqno);
|
||||||
extern HeapTuple LanguageNameIndexScan(Relation heapRelation, char *lanName);
|
extern HeapTuple LanguageNameIndexScan(Relation heapRelation, char *lanName);
|
||||||
extern HeapTuple LanguageOidIndexScan(Relation heapRelation, Oid lanId);
|
extern HeapTuple LanguageOidIndexScan(Relation heapRelation, Oid lanId);
|
||||||
extern HeapTuple ListenerRelnamePidIndexScan(Relation heapRelation, char *relName, int4 pid);
|
extern HeapTuple ListenerPidRelnameIndexScan(Relation heapRelation, int4 pid, char *relName);
|
||||||
extern HeapTuple OpclassDeftypeIndexScan(Relation heapRelation, Oid defType);
|
extern HeapTuple OpclassDeftypeIndexScan(Relation heapRelation, Oid defType);
|
||||||
extern HeapTuple OpclassNameIndexScan(Relation heapRelation, char *opcName);
|
extern HeapTuple OpclassNameIndexScan(Relation heapRelation, char *opcName);
|
||||||
extern HeapTuple OperatorNameIndexScan(Relation heapRelation,
|
extern HeapTuple OperatorNameIndexScan(Relation heapRelation,
|
||||||
@ -190,7 +190,7 @@ DECLARE_UNIQUE_INDEX(pg_index_indexrelid_index on pg_index using btree(indexreli
|
|||||||
DECLARE_UNIQUE_INDEX(pg_inherits_relid_seqno_index on pg_inherits using btree(inhrelid oid_ops, inhseqno int4_ops));
|
DECLARE_UNIQUE_INDEX(pg_inherits_relid_seqno_index on pg_inherits using btree(inhrelid oid_ops, inhseqno int4_ops));
|
||||||
DECLARE_UNIQUE_INDEX(pg_language_name_index on pg_language using btree(lanname name_ops));
|
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_language_oid_index on pg_language using btree(oid oid_ops));
|
||||||
DECLARE_UNIQUE_INDEX(pg_listener_relname_pid_index on pg_listener using btree(relname name_ops, listenerpid 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 */
|
/* 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_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_name_index on pg_opclass using btree(opcname name_ops));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user