pgsql: psql: Add \sendpipeline to send query buffers while in a pipelin

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: psql: Add \sendpipeline to send query buffers while in a pipelin
Date: 2025-03-18 00:41:54
Message-ID: E1tuL1m-0030kJ-27@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

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

In the initial pipeline support for psql added in 41625ab8ea3d, \g was
used as the way to push extended query into an ongoing pipeline. \gx
was blocked.

These two meta-commands have format-related options that can be applied
when fetching a query result (expanded, etc.). As the results of a
pipeline are fetched asynchronously, not at the moment of the
meta-command execution but at the moment of a \getresults or a
\endpipeline, authorizing \g while blocking \gx leads to a confusing
implementation, making one think that psql should be smart enough to
remember the output format options defined from the time when \g or \gx
were executed. Doing so would lead to more code complications when
retrieving a batch of results. There is an extra argument other than
simplicity here: the output format options defined at the point of a
\getresults or a \endpipeline execution should be what affect the output
format for a batch of results.

To avoid any confusion, we have settled to the introduction of a new
meta-command called \sendpipeline, replacing \g when within a pipeline.
An advantage of this design is that it is possible to add new options
specific to pipelines when sending a query buffer, independent of \g
and \gx, should it prove to be necessary.

Most of the changes of this commit happen in the regression tests, where
\g is replaced by \sendpipeline. More tests are added to check that \g
is not allowed.

Per discussion between the author, Daniel Vérité and me.

Author: Anthonin Bonnefoy <anthonin(dot)bonnefoy(at)datadoghq(dot)com>
Discussion: https://postgr.es/m/ad4b9f1a-f7fe-4ab8-8546-90754726d0be@manitou-mail.org

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/17caf6644546eccb4a1f6e0137ea1d0f58da8c16

Modified Files
--------------
doc/src/sgml/ref/psql-ref.sgml | 11 +-
src/bin/psql/command.c | 45 +++++-
src/bin/psql/help.c | 1 +
src/bin/psql/tab-complete.in.c | 3 +-
src/test/regress/expected/psql.out | 1 +
src/test/regress/expected/psql_pipeline.out | 237 +++++++++++++++-------------
src/test/regress/sql/psql.sql | 1 +
src/test/regress/sql/psql_pipeline.sql | 231 ++++++++++++++-------------
8 files changed, 305 insertions(+), 225 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Robert Haas 2025-03-18 03:02:14 Re: pgsql: pg_upgrade: Preserve default char signedness value from old clus
Previous Message Andres Freund 2025-03-17 23:23:42 pgsql: aio: Basic subsystem initialization