Re: Add Pipelining support in psql

Jelte Fennema <postgres@jeltef.nl>

From: Jelte Fennema-Nio <postgres@jeltef.nl>
To: Kirill Reshke <reshkekirill@gmail.com>
Cc: Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2024-11-27T12:54:45Z
Lists: pgsql-hackers
On Wed, 27 Nov 2024 at 13:05, Kirill Reshke <reshkekirill@gmail.com> wrote:
> ```
> db1=# \startpipeline
> db1=# begin \parse p1
> db1=*#
> ```
> Notice the asterisks that appeared after parse the message. This
> typically indicates we are in the tx block. this is however untrue
> before the bind+exec message for p1 will be sent (\bind_name
> metacommand). Am I correct?

This behaviour is expected, it also happens if you send "SELECT 1"
instead of "begin" in the parse message:
db1=# \startpipeline
db1=# SELECT 1 \parse p1
db1=*#

The reason this happens is that the first command in a pipeline sent
to the server opens an implicit transaction. See the "implicit COMMIT"
wording here[1], or look at this code in exec_parse_message:

    /*
     * Start up a transaction command so we can run parse analysis etc. (Note
     * that this will normally change current memory context.) Nothing happens
     * if we are already in one.  This also arms the statement timeout if
     * necessary.
     */
    start_xact_command();


[1]: https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-FLOW-PIPELINING



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. psql: Fix assertion failures with pipeline mode

  2. psql: Rework TAP routine psql_fails_like() to define WAL sender context

  3. psql: Split extended query protocol meta-commands in --help=commands

  4. psql: Improve descriptions of \\flush[request] in --help

  5. psql: Fix incorrect status code returned by \getresults

  6. psql: Allow queries terminated by semicolons while in pipeline mode

  7. psql: Add \sendpipeline to send query buffers while in a pipeline

  8. psql: Fix memory leak with \gx used within a pipeline

  9. psql: Add pipeline status to prompt and some state variables

  10. Add more tests for utility commands in pipelines

  11. psql: Add support for pipelines

  12. Add braces for if block with large comment in psql's common.c