Support named (destination) portals in extended proto for psql meta commands. - Mailing list pgsql-hackers

From Kirill Reshke
Subject Support named (destination) portals in extended proto for psql meta commands.
Date
Msg-id CALdSSPjjnnjg0H1ypSVw4CuUkUdfQQ5Wewaf6V4xhc5z7TVoKg@mail.gmail.com
Whole thread Raw
Responses Re: Support named (destination) portals in extended proto for psql meta commands.
Re: Support named (destination) portals in extended proto for psql meta commands.
List pgsql-hackers
I am a big fan of psql extended proto meta commands feature [0], and I
frequently use these psql commands for testing purposes while
developing [1] & [2].
Recently I had to support and test some more named portals (cursor)
use-cases for [1]. And I faced a problem, that there is no way to test
extended query bind commands for non-empty destination portal. So, I
propose to add a psql meta command just for that purpose. Something
like \bind_cursor CURSOR_NAME STMT_NAME [params..]

Per doc [3]
```
The Bind message gives the name of the source prepared statement
(empty string denotes the unnamed prepared statement), the name of the
destination portal (empty string denotes the unnamed portal), and the
values to use for any parameter placeholders present in the prepared
statement.
```


I did actually start to implement this, but I faced the issue with
libpq. The thing is,
PQsendQueryParams does not support non-unnamed portal (cursor) case,
and its workhorse,
PQsendQueryGuts also. In fact, in PQsendQueryGuts we always send empty
portal name

```
/* Construct the Bind message */
if (pqPutMsgStart(PqMsg_Bind, conn) < 0 ||
pqPuts("", conn) < 0 ||
pqPuts(stmtName, conn) < 0)
goto sendFailed;
```

Per [4] the first string is the name of the destination portal and
PQsendQueryGuts always send empty strings.

I did some archeology only to find that the PQsendQueryParams
declaration did not change since [5].
So, sending non-empty portal names was never supported in libpq?
It makes me think there was a good reason for that. Can somebody
please clarify on that?
If that's ok, I will proceed with sending patches for libpq and psql
to support $subj, if no complains.


[0] https://git.postgresql.org/cgit/postgresql.git/commit/?id=d55322b0da60a8798ffdb8b78ef90db0fb5be18e
[1] https://github.com/pg-sharding/spqr/pulls
[2] https://github.com/yandex/odyssey
[3] https://www.postgresql.org/docs/current/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY
[4] https://www.postgresql.org/docs/current/protocol-message-formats.html
[5] https://git.postgresql.org/cgit/postgresql.git/commit/?id=efc3a25bb02a

-- 
Best regards,
Kirill Reshke



pgsql-hackers by date:

Previous
From: Roman Khapov
Date:
Subject: Additional message in pg_terminate_backend
Next
From: Philipp Marek
Date:
Subject: Re: [PATCH] Better Performance for PostgreSQL with large INSERTs