It appears that, for no particularly good reason, pg_listener.h
deviates from the usual convention for declaring attribute number
constants.  Normally, it's

#define Anum_{catalog-name}_{column-name}  {attribute-number}

pg_listener.h, however substitutes a different string that is similar,
but not the same as, the column name.

Suggested patch attached.

...Robert
*** a/src/backend/commands/async.c
--- b/src/backend/commands/async.c
***************
*** 486,493 **** Exec_Listen(Relation lRel, const char *relname)
  
  	namestrcpy(&condname, relname);
  	values[Anum_pg_listener_relname - 1] = NameGetDatum(&condname);
! 	values[Anum_pg_listener_pid - 1] = Int32GetDatum(MyProcPid);
! 	values[Anum_pg_listener_notify - 1] = Int32GetDatum(0);		/* no notifies pending */
  
  	tuple = heap_form_tuple(RelationGetDescr(lRel), values, nulls);
  
--- 486,493 ----
  
  	namestrcpy(&condname, relname);
  	values[Anum_pg_listener_relname - 1] = NameGetDatum(&condname);
! 	values[Anum_pg_listener_listenerpid - 1] = Int32GetDatum(MyProcPid);
! 	values[Anum_pg_listener_notification - 1] = Int32GetDatum(0);		/* no notifies pending */
  
  	tuple = heap_form_tuple(RelationGetDescr(lRel), values, nulls);
  
***************
*** 567,573 **** Exec_UnlistenAll(Relation lRel)
  
  	/* Find and delete all entries with my listenerPID */
  	ScanKeyInit(&key[0],
! 				Anum_pg_listener_pid,
  				BTEqualStrategyNumber, F_INT4EQ,
  				Int32GetDatum(MyProcPid));
  	scan = heap_beginscan(lRel, SnapshotNow, 1, key);
--- 567,573 ----
  
  	/* Find and delete all entries with my listenerPID */
  	ScanKeyInit(&key[0],
! 				Anum_pg_listener_listenerpid,
  				BTEqualStrategyNumber, F_INT4EQ,
  				Int32GetDatum(MyProcPid));
  	scan = heap_beginscan(lRel, SnapshotNow, 1, key);
***************
*** 598,606 **** Send_Notify(Relation lRel)
  	/* preset data to update notify column to MyProcPid */
  	memset(nulls, false, sizeof(nulls));
  	memset(repl, false, sizeof(repl));
! 	repl[Anum_pg_listener_notify - 1] = true;
  	memset(value, 0, sizeof(value));
! 	value[Anum_pg_listener_notify - 1] = Int32GetDatum(MyProcPid);
  
  	scan = heap_beginscan(lRel, SnapshotNow, 0, NULL);
  
--- 598,606 ----
  	/* preset data to update notify column to MyProcPid */
  	memset(nulls, false, sizeof(nulls));
  	memset(repl, false, sizeof(repl));
! 	repl[Anum_pg_listener_notification - 1] = true;
  	memset(value, 0, sizeof(value));
! 	value[Anum_pg_listener_notification - 1] = Int32GetDatum(MyProcPid);
  
  	scan = heap_beginscan(lRel, SnapshotNow, 0, NULL);
  
***************
*** 978,984 **** ProcessIncomingNotify(void)
  
  	/* Scan only entries with my listenerPID */
  	ScanKeyInit(&key[0],
! 				Anum_pg_listener_pid,
  				BTEqualStrategyNumber, F_INT4EQ,
  				Int32GetDatum(MyProcPid));
  	scan = heap_beginscan(lRel, SnapshotNow, 1, key);
--- 978,984 ----
  
  	/* Scan only entries with my listenerPID */
  	ScanKeyInit(&key[0],
! 				Anum_pg_listener_listenerpid,
  				BTEqualStrategyNumber, F_INT4EQ,
  				Int32GetDatum(MyProcPid));
  	scan = heap_beginscan(lRel, SnapshotNow, 1, key);
***************
*** 986,994 **** ProcessIncomingNotify(void)
  	/* Prepare data for rewriting 0 into notification field */
  	memset(nulls, false, sizeof(nulls));
  	memset(repl, false, sizeof(repl));
! 	repl[Anum_pg_listener_notify - 1] = true;
  	memset(value, 0, sizeof(value));
! 	value[Anum_pg_listener_notify - 1] = Int32GetDatum(0);
  
  	while ((lTuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
  	{
--- 986,994 ----
  	/* Prepare data for rewriting 0 into notification field */
  	memset(nulls, false, sizeof(nulls));
  	memset(repl, false, sizeof(repl));
! 	repl[Anum_pg_listener_notification - 1] = true;
  	memset(value, 0, sizeof(value));
! 	value[Anum_pg_listener_notification - 1] = Int32GetDatum(0);
  
  	while ((lTuple = heap_getnext(scan, ForwardScanDirection)) != NULL)
  	{
*** a/src/include/catalog/pg_listener.h
--- b/src/include/catalog/pg_listener.h
***************
*** 48,55 **** typedef FormData_pg_listener *Form_pg_listener;
   */
  #define Natts_pg_listener						3
  #define Anum_pg_listener_relname				1
! #define Anum_pg_listener_pid					2
! #define Anum_pg_listener_notify					3
  
  /* ----------------
   *		initial contents of pg_listener are NOTHING.
--- 48,55 ----
   */
  #define Natts_pg_listener						3
  #define Anum_pg_listener_relname				1
! #define Anum_pg_listener_listenerpid			2
! #define Anum_pg_listener_notification			3
  
  /* ----------------
   *		initial contents of pg_listener are NOTHING.
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to