> 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.