Re: Add Pipelining support in psql

From: "Daniel Verite" <daniel(at)manitou-mail(dot)org>
To: "Anthonin Bonnefoy" <anthonin(dot)bonnefoy(at)datadoghq(dot)com>
Cc: Michael Paquier <michael(at)paquier(dot)xyz>, Jelte Fennema-Nio <postgres(at)jeltef(dot)nl>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Add Pipelining support in psql
Date: 2025-03-05 14:25:12
Message-ID: a96682c3-9505-456f-b5c7-1b9d1e6303b4@manitou-mail.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Anthonin Bonnefoy wrote:

> So if I understand correctly, you want to automatically convert a
> simple query into an extended query when we're within a pipeline. That
> would be doable with:
>
> --- a/src/bin/psql/common.c
> +++ b/src/bin/psql/common.c
> @@ -1668,7 +1668,16 @@ ExecQueryAndProcessResults(const char *query,
> }
> break;
> case PSQL_SEND_QUERY:
> - success = PQsendQuery(pset.db, query);
> + if (PQpipelineStatus(pset.db) != PQ_PIPELINE_OFF) {
> + success = PQsendQueryParams(pset.db, query,
> +
> pset.bind_nparams, NULL,
> + (const
> char *const *) pset.bind_params,
> + NULL, NULL,
> 0);
> + if (success)
> + pset.piped_commands++;
> + }
> + else
> + success = PQsendQuery(pset.db, query);
> break;
> }

Yes, except that the bind parameters need to be cleared after this,
as done in clean_extended_state()

> I do see the idea to make it easier to convert existing scripts into
> using pipelining. The main focus of the initial implementation was
> more on protocol regression tests with psql, so that's not necessarily
> something I had in mind.

Understood. Yet pipelining can accelerate considerably certain scripts
when client-server latency is an issue. We should expect end users to
benefit from it too.

> I have some reservation as it will push all
> parameters in the query string which may not be the desired
> behaviour.

I don't follow. For me the change discussed here is about simplifying
the syntax when there is no out-of-query $N-style parameters, it does
not change anything for queries that actually use them, nor does
it forbid a \bind without parameters.

Best regards,
--
Daniel Vérité
https://postgresql.verite.pro/

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Sami Imseih 2025-03-05 14:27:35 should num_custom_plans be reset after plan invalidation?
Previous Message Andres Freund 2025-03-05 14:19:11 Re: Incorrect result of bitmap heap scan.