• Tom Lane's avatar
    Client-side fixes for delayed NOTIFY receipt. · 4247db62
    Tom Lane authored
    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
    4247db62
testlibpq2.c 3.39 KB