pgsql: Client-side fixes for delayed NOTIFY receipt.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Client-side fixes for delayed NOTIFY receipt.
Date: 2018-10-20 02:23:15
Message-ID: E1gDgv5-0005Xt-9o@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Client-side fixes for delayed NOTIFY receipt.

PQnotifies() is defined to just process already-read data, not try to read
any more from the socket. (This is a debatable decision, perhaps, but I'm
hesitant to change longstanding library behavior.) The documentation has
long recommended calling PQconsumeInput() before PQnotifies() to ensure
that any already-arrived message would get absorbed and processed.
However, psql did not get that memo, which explains why it's not very
reliable about reporting notifications promptly.

Also, most (not quite all) callers called PQconsumeInput() just once before
a PQnotifies() loop. Taking this recommendation seriously implies that we
should do PQconsumeInput() before each call. This is more important now
that we have "payload" strings in notification messages than it was before;
that increases the probability of having more than one packet's worth
of notify messages. Hence, adjust code as well as documentation examples
to do it like that.

Back-patch to 9.5 to match related server fixes. In principle we could
probably go back further with these changes, but given lack of field
complaints I doubt it's worthwhile.

Discussion: https://postgr.es/m/CAOYf6ec-TmRYjKBXLLaGaB-jrd=mjG1Hzn1a1wufUAR39PQYhw@mail.gmail.com

Branch
------
REL9_5_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/ac3be116a79855b8a61c0efccd1c26470e8dbeef

Modified Files
--------------
doc/src/sgml/libpq.sgml | 3 ++-
src/bin/psql/common.c | 4 +++-
src/interfaces/ecpg/ecpglib/execute.c | 5 +++--
src/interfaces/libpq/fe-exec.c | 3 +++
src/test/examples/testlibpq2.c | 1 +
5 files changed, 12 insertions(+), 4 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2018-10-20 03:39:55 Re: pgsql: Add TAP tests for pg_verify_checksums
Previous Message Tom Lane 2018-10-19 23:36:57 pgsql: Sync our copy of the timezone library with IANA release tzcode20