Thread

  1. Re: When extended query protocol ends?

    Dave Cramer <davecramer@postgres.rocks> — 2024-02-13T14:34:46Z

    HI Tatsuo,
    
    
    
    On Mon, 29 Jan 2024 at 20:15, Tatsuo Ishii <ishii@sraoss.co.jp> wrote:
    
    > Hello Dave,
    >
    > > Tatsuo Ishii <ishii@sraoss.co.jp> writes:
    > >> Below is outputs from "pgproto" command coming with Pgpool-II.
    > >> (Lines starting "FE" represents a message from frontend to backend.
    > >> Lines starting "BE" represents a message from backend to frontend.)
    > >
    > >> FE=> Parse(stmt="", query="SET extra_float_digits = 3")
    > >> FE=> Bind(stmt="", portal="")
    > >> FE=> Execute(portal="")
    > >> FE=> Parse(stmt="", query="SET extra_float_digits = 3")
    > >> FE=> Bind(stmt="", portal="")
    > >> FE=> Execute(portal="")
    > >> FE=> Query (query="SET extra_float_digits = 3")
    > >> <= BE ParseComplete
    > >> <= BE BindComplete
    > >> <= BE CommandComplete(SET)
    > >> <= BE ParseComplete
    > >> <= BE BindComplete
    > >> <= BE CommandComplete(SET)
    > >> <= BE CommandComplete(SET)
    > >> <= BE ReadyForQuery(I)
    > >> FE=> Terminate
    > >
    > >> As you can see, two "SET extra_float_digits = 3" is sent in the
    > >> extended query protocol, then one "SET extra_float_digits = 3" follows
    > >> in the simple query protocol. No sync message is sent. However, I get
    > >> ReadyForQuery at the end. It seems the extended query protocol is
    > >> ended by a simple query protocol message instead of a sync message.
    > >
    > >> My question is, is this legal in terms of fronted/backend protocol?
    > >
    > > I think it's poor practice, at best.  You should end the
    > > extended-protocol query cycle before invoking simple query.
    >
    > From [1] I think the JDBC driver sends something like below if
    > autosave=always option is specified.
    >
    > "BEGIN READ ONLY" Parse/Bind/Eexecute (in the extended query protocol)
    > "SAVEPOINT PGJDBC_AUTOSAVE" (in the simple query protocol)
    >
    > It seems the SAVEPOINT is sent without finishing the extended query
    > protocol (i.e. without Sync message). Is it possible for the JDBC
    > driver to issue a Sync message before sending SAVEPOINT in simple
    > query protocol? Or you can send SAVEPOINT using the extended query
    > protocol.
    >
    > [1]
    > https://www.pgpool.net/pipermail/pgpool-general/2023-December/009051.html
    
    
    Can you ask the OP what version of the driver they are using. From what I
    can tell we send BEGIN using SimpleQuery.
    
    Dave