Re: BUG #19488: Standby connection fails after dropping on login event trigger enabled always
Fujii Masao <masao.fujii@gmail.com>
From: Fujii Masao <masao.fujii@gmail.com>
To: Alexander Korotkov <aekorotkov@gmail.com>
Cc: Ayush Tiwari <ayushtiwari.slg01@gmail.com>, kyzevan23@mail.ru, pgsql-bugs@lists.postgresql.org
Date: 2026-05-20T12:05:03Z
Lists: pgsql-bugs
On Wed, May 20, 2026 at 8:31 PM Alexander Korotkov <aekorotkov@gmail.com> wrote: > > On Wed, May 20, 2026 at 1:03 PM Fujii Masao <masao.fujii@gmail.com> wrote: > > On Wed, May 20, 2026 at 1:37 PM Ayush Tiwari > > <ayushtiwari.slg01@gmail.com> wrote: > > > Thanks for the report and the precise repro. > > > > +1 > > > > > Attached patch adds a RecoveryInProgress() check to skip the cleanup > > > branch on standbys. > > > > Thanks for investigating this issue and for the patch! > > The patch looks good to me. > > > > > I think this needs to be backpatched too. > > > > Yes. Seems this should be backpatched to v17, where login event triggers > > were introduced. > > I've added a tap test reproducing the bug. I'm going to push and > backpatch this to v17 if no objections. +# Wait for the standby to replay the CREATE/DROP catalog state. At +# this point the standby's pg_database.dathasloginevt is still true. +$primary->wait_for_replay_catchup($standby); + +# A new connection to the standby exercises EventTriggerOnLogin()'s +# cleanup branch. With the RecoveryInProgress() guard, that branch is +# skipped on the standby and the connection succeeds. Without it the +# session aborts with a FATAL about AccessExclusiveLock. Probing the +# flag itself via safe_psql is what triggers the cleanup path. +is( $standby->safe_psql( + 'postgres', + "SELECT dathasloginevt FROM pg_database WHERE datname = 'postgres'"), + 't', + 'standby accepts connection and reports dangling dathasloginevt'); The test looks unstable to me. wait_for_replay_catchup() may connect to the primary to obtain the flush LSN, which could cause dathasloginevt to become false before the subsequent safe_psql() call on the standby. Regards, -- Fujii Masao
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Skip pg_database.dathasloginevt cleanup on standby
- 4a375527a195 17 (unreleased) landed
- 97b5c5aaad5d 18 (unreleased) landed
- bec61f59354e 19 (unreleased) landed