Subject: Unexpected Backend PID reported by Notification

From: Dominique Devienne <[email-masked]>
Date: Tue, 11 Jun 2024 17:05:57 +0200

Hi. I have a unit test using a single connection, that simulates a
client interacting with a server via a PostgreSQL "queue", i.e. a
non-writable table with SECURITY DEFINER procedures to mediate writes
to that table, with those PROC-initiated updates triggering
pg_notify() messages (via an UPDATE trigger).

The test is passing, I get all the side-effects and notifications I
expect. BUT...
For some reason, the backend_pid reported on the notification object
itself (i.e. PGnotify::be_pid),
is different from the one reported for the (sole) connection the unit
test is using (PQbackendPID()).

How can that be?
Are Stored PROCs running in a different backend?
Are Triggers running in a different backend?

Any doc pointers to explain this behavior?

Thanks. --DD

PS: v14 server on RedHat; v16 libpq on Windows
PPS: Below's a snippet of my test code, which shows actual PID values:

    auto perreq_notif = c.notification();
    BOOST_REQUIRE(perreq_notif);
    BOOST_CHECK_EQUAL(perreq_notif.channel(), req.channel());
    /*
    ** In fact I get perreq_notif.backend_pid() == N + c.backend_pid() !!!
    ** Is the fact the pg_notify() is done from a trigger the reason???
    ** e.g. [4053957 != 4053955]
    BOOST_CHECK_EQUAL(perreq_notif.backend_pid(), c.backend_pid());
    */
    BOOST_CHECK_EQUAL(perreq_notif.payload(), "...");

---

From: "David G. Johnston" <[email-masked]>
Date: Tue, 11 Jun 2024 08:29:36 -0700

> Are Triggers running in a different backend?

No to both.  Whatever backend the SQL to invoke those was sent on is the
backend that executes them.

David J.

---

From: Dominique Devienne <[email-masked]>
Date: Wed, 12 Jun 2024 08:53:55 +0200

On Tue, Jun 11, 2024 at 5:29 PM David G. Johnston
<[email-masked]> wrote:
> No to both.  Whatever backend the SQL to invoke those was sent on is the backend that executes them.

Thanks for confirming David (and Adrian). I indeed had two connections
after all. User error. Sorry for the noise. --DD