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