Re: BackendKeyData is mandatory?
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Tatsuo Ishii <ishii@postgresql.org>, peter@eisentraut.org
Cc: pgsql-hackers@postgresql.org
Date: 2025-06-19T10:20:31Z
Lists: pgsql-hackers
On 19/06/2025 13:03, Tatsuo Ishii wrote: >> I think that's fine, if the server does not want to support query >> cancellation. The current protocol description certainly does not >> support the idea that it is a hard error *not* to send BackendKeyData. > > Isn't it scary if the server does not allow a query cancel? For > example, if the server charge you per query duration and if you > accidentally send a long running query, the only escape exit is the > query cancellation. Or disconnect. Or pg_cancel_backend(). You can also easily have a stray psql session where the user has gone out for lunch. Or an application that doesn't have a timeout. Many other scenarios like that. >> It's also worth thinking about the new protocol 3.2 longer key data. >> A paranoid server might choose to send key data only if protocol >=3.2 >> is chosen and not if a lower, notionally less secure version is >> chosen. > > I would say the server does wrong a decision. I think even if the key > is not long, it's still useful than nothing. I tend to agree, but people have different priorities. It's also reasonable that you'd want to only support long cancellation keys. Or maybe you have a proxy that doesn't implement query cancellation, or only supports it with long keys because it embeds routing information in the key, or something like that. FWIW my reading of the protocol docs is that BackendKeyData is optional. If I was writing a client today, I would accept it missing. But of course all PostgreSQL versions today do send it, and I wouldn't be surprised if there are clients out there that get confused if they don't see it. - Heikki
Commits
-
Revert unnecessary check for NULL
- 5a26a3e4eeb2 18.0 landed
- 807ee417e562 19 (unreleased) landed
-
libpq: Be strict about cancel key lengths
- e7ff96853ea7 18.0 landed
- e411a8d25a4b 19 (unreleased) landed
-
libpq: Handle OOM by disconnecting instead of hanging or skipping msgs
- 8aa287c9061b 18.0 landed
- f6f0542266f0 19 (unreleased) landed
-
libpq: Complain about missing BackendKeyData later with PGgetCancel()
- 42b1480eb2c6 18.0 landed
- a4801eb691ed 19 (unreleased) landed