mirror of
https://github.com/postgres/postgres.git
synced 2025-11-12 05:01:15 +03:00
Re-order pg_listener index so it can later be used in an index scan.
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* 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] =
|
||||
{LanguageOidIndex, LanguageNameIndex};
|
||||
char *Name_pg_listener_indices[Num_pg_listener_indices] =
|
||||
{ListenerRelnamePidIndex};
|
||||
{ListenerPidRelnameIndex};
|
||||
char *Name_pg_opclass_indices[Num_pg_opclass_indices] =
|
||||
{OpclassNameIndex, OpclassDeftypeIndex};
|
||||
char *Name_pg_operator_indices[Num_pg_operator_indices] =
|
||||
@@ -653,7 +653,7 @@ LanguageOidIndexScan(Relation heapRelation, Oid lanId)
|
||||
|
||||
|
||||
HeapTuple
|
||||
ListenerRelnamePidIndexScan(Relation heapRelation, char *relName, int4 pid)
|
||||
ListenerPidRelnameIndexScan(Relation heapRelation, int4 pid, char *relName)
|
||||
{
|
||||
Relation idesc;
|
||||
ScanKeyData skey[2];
|
||||
@@ -662,16 +662,16 @@ ListenerRelnamePidIndexScan(Relation heapRelation, char *relName, int4 pid)
|
||||
ScanKeyEntryInitialize(&skey[0],
|
||||
(bits16) 0x0,
|
||||
(AttrNumber) 1,
|
||||
(RegProcedure) F_NAMEEQ,
|
||||
PointerGetDatum(relName));
|
||||
(RegProcedure) F_INT4EQ,
|
||||
Int32GetDatum(pid));
|
||||
|
||||
ScanKeyEntryInitialize(&skey[1],
|
||||
(bits16) 0x0,
|
||||
(AttrNumber) 2,
|
||||
(RegProcedure) F_INT4EQ,
|
||||
Int32GetDatum(pid));
|
||||
(RegProcedure) F_NAMEEQ,
|
||||
PointerGetDatum(relName));
|
||||
|
||||
idesc = index_openr(ListenerRelnamePidIndex);
|
||||
idesc = index_openr(ListenerPidRelnameIndex);
|
||||
tuple = CatalogIndexFetchTuple(heapRelation, idesc, skey, 2);
|
||||
|
||||
index_close(idesc);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* 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 ... */
|
||||
if (!AsyncExistsPendingNotify(relname))
|
||||
{
|
||||
|
||||
/*
|
||||
* We allocate list memory from the global malloc pool to ensure
|
||||
* 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;
|
||||
int i;
|
||||
bool isnull;
|
||||
int alreadyListener = 0;
|
||||
TupleDesc tupDesc;
|
||||
|
||||
if (Trace_notify)
|
||||
@@ -212,25 +210,12 @@ Async_Listen(char *relname, int pid)
|
||||
tdesc = RelationGetDescr(lRel);
|
||||
|
||||
/* Detect whether we are already listening on this relname */
|
||||
scan = heap_beginscan(lRel, 0, SnapshotNow, 0, (ScanKey) NULL);
|
||||
while (HeapTupleIsValid(tuple = heap_getnext(scan, 0)))
|
||||
{
|
||||
d = heap_getattr(tuple, Anum_pg_listener_relname, tdesc, &isnull);
|
||||
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)
|
||||
tuple = SearchSysCacheTuple(LISTENREL, Int32GetDatum(pid),
|
||||
PointerGetDatum(relname),
|
||||
0, 0);
|
||||
if (tuple != NULL)
|
||||
{
|
||||
/* No need to scan the rest of the table */
|
||||
heap_close(lRel, AccessExclusiveLock);
|
||||
elog(NOTICE, "Async_Listen: We are already listening on %s", relname);
|
||||
return;
|
||||
@@ -313,9 +298,9 @@ Async_Unlisten(char *relname, int pid)
|
||||
|
||||
lRel = heap_openr(ListenerRelationName, AccessExclusiveLock);
|
||||
/* Note we assume there can be only one matching tuple. */
|
||||
lTuple = SearchSysCacheTuple(LISTENREL, PointerGetDatum(relname),
|
||||
Int32GetDatum(pid),
|
||||
0, 0);
|
||||
lTuple = SearchSysCacheTuple(LISTENREL, Int32GetDatum(pid),
|
||||
PointerGetDatum(relname),
|
||||
0, 0);
|
||||
if (lTuple != NULL)
|
||||
heap_delete(lRel, &lTuple->t_self, NULL);
|
||||
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
|
||||
* $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
|
||||
* These routines allow the parser/planner/executor to perform
|
||||
@@ -241,14 +241,14 @@ static struct cachedesc cacheinfo[] = {
|
||||
{ListenerRelationName, /* LISTENREL */
|
||||
2,
|
||||
{
|
||||
Anum_pg_listener_relname,
|
||||
Anum_pg_listener_pid,
|
||||
Anum_pg_listener_relname,
|
||||
0,
|
||||
0
|
||||
},
|
||||
sizeof(FormData_pg_listener),
|
||||
ListenerRelnamePidIndex,
|
||||
ListenerRelnamePidIndexScan},
|
||||
ListenerPidRelnameIndex,
|
||||
ListenerPidRelnameIndexScan},
|
||||
{OperatorRelationName, /* OPERNAME */
|
||||
4,
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user