[fpc-pascal] PostgreSQL notifications broken

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Fri Sep 11 11:51:11 CEST 2015


PostgreSQL has a useful feature where application programs can send 
notifications to each other, this tends to be much "cheaper" than 
periodically polling a table for changes.

I've had this working on various CPUs and OSes in a number of programs 
since at least 2.2.4, but it appears to have been broken at some point 
between 2.6.0 and 2.6.4 with problems persisting through to 3.0.0-rc1 
and trunk. The specific fragment of code that's failing looks like this:

   result := badPoll;
   if PQStatus(DbTF.PQConnection1.Handle) <> CONNECTION_OK then
     exit;
   pqConsumeResult := PQconsumeInput(DbTF.PQConnection1.Handle);
   if PQStatus(DbTF.PQConnection1.Handle) <> CONNECTION_OK then
     exit;
   result := okPollNo;
   notification := PQnotifies(DbTF.PQConnection1.Handle);
   if notification <> nil then

 From 2.6.4 onwards PQnotifies() always returns nil, despite other 
functionality behaving as expected.

I'm working on trying to pin this down a bit better, but would 
appreciate any pointers from anybody who remembers working in this area.

The thing that usually causes problems for this feature is if the 
database connection is closed and reopened, so that the server no longer 
knows that the app wants to receive notifications. I haven't yet 
researched what relevant info Postgres exposes.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]



More information about the fpc-pascal mailing list