Thread: BackendKeyData is mandatory?
In the Frontend/Backend protocol, it is explained that after successful authentication following messages can be sent from backend to frontend[1]: BackendKeyData ParameterStatus ReadyForQuery ErrorResponse NoticeResponse My question is, BackendKeyData is mandatory or not. Currently Pgpool-II raises a fatal error if BackendKeyData is not sent before ReadyForQuery arrives. This is because without the message, frontend cannot send a CancelRequest message later on, as there's no secret key. I heard that some "PostgreSQL compatible" servers do not send BackendKeyData message to frontend. I wonder if this is a protocol violation. [1] https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-FLOW-START-UP Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp
On Monday, June 16, 2025, Tatsuo Ishii <ishii@postgresql.org> wrote:
My question is, BackendKeyData is mandatory or not. Currently
Pgpool-II raises a fatal error if BackendKeyData is not sent before
ReadyForQuery arrives. This is because without the message, frontend
cannot send a CancelRequest message later on, as there's no secret
key.
I wouldn’t expect a proxy to make a judgement here; but to simply forward what does show up and otherwise stay silent. If there is proxy layer code needed to deal with its absence ignoring the cancel attempt with a log warning would be sufficient. Otherwise, the user has made their choices and this is an optional feature in practice (though resorting to pg_cancel_query make be required for truly hung processes).
David J.
>> My question is, BackendKeyData is mandatory or not. Currently >> Pgpool-II raises a fatal error if BackendKeyData is not sent before >> ReadyForQuery arrives. This is because without the message, frontend >> cannot send a CancelRequest message later on, as there's no secret >> key. > > As you say, without BackendKeyData it's impossible to send a query > cancel, so we expect the server will always send that. That's my understanding too. >> I heard that some "PostgreSQL compatible" servers do not send >> BackendKeyData message to frontend. I wonder if this is a protocol >> violation. > > I'd say so. Maybe whoever that is doesn't care to support query > cancel. They're within their rights to do that I guess, but > Pgpool-II does not have to support the case. (A less incompatible > way of not supporting query cancel is to send dummy BackendKeyData > values and then just ignore cancel requests. So I don't see that > you need to do anything towards this goal, if it is a goal and > not merely a broken implementation.) Agreed. -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp