Re: [BUG] pg_stat_statements and extended query protocol

Поиск
Список
Период
Сортировка
От Michael Paquier
Тема Re: [BUG] pg_stat_statements and extended query protocol
Дата
Msg-id ZCPhyBISjW2OMgrm@paquier.xyz
обсуждение исходный текст
Ответ на Re: [BUG] pg_stat_statements and extended query protocol  ("Imseih (AWS), Sami" <simseih@amazon.com>)
Ответы Re: [BUG] pg_stat_statements and extended query protocol
Список pgsql-hackers
On Thu, Mar 23, 2023 at 01:54:05PM +0000, Imseih (AWS), Sami wrote:
> Yes, that is possible but we will need to add a libpq API
> that allows the caller to pass in a "fetch size".
> PQsendQueryParams does not take in a "fetch size",
> so it returns all rows, through PQsendQueryParams
>
> https://github.com/postgres/postgres/blob/master/src/interfaces/libpq/fe-exec.c#L1882
>
> Adding such an API that takes in a "fetch size" will be beneficial
> not just for this test, but I can see it enabling another psql meta command,
> similar to \bind but that takes in a "fetch size".

So...  The idea here is to set a custom fetch size so as the number of
calls can be deterministic in the tests, still more than 1 for the
tests we'd have.  And your point is that libpq enforces always 0 when
sending the EXECUTE message causing it to always return all the rows
for any caller of PQsendQueryGuts().

The extended protocol allows that, so you would like a libpq API to
have more control of what we send with EXECUTE:
https://www.postgresql.org/docs/current/protocol-overview.html#PROTOCOL-QUERY-CONCEPTS

The extended query protocol would require multiple 'E' messages, but
we would not need multiple describe or bind messages, meaning that
this cannot just be an extra flavor PQsendQueryParams().  Am I gettig
that right?  The correct API design seems tricky, to say the least.
Perhaps requiring this much extra work in libpq for the purpose of
having some tests in this thread is not a brilliant idea..  Or perhaps
we could just do it and have something a-la-JDBC with two routines?
That would be one libpq routine for describe/bind and one for execute
where the limit can be given by the caller in the latter case, similar
to sendDescribeStatement() and sendExecute() in
QueryExecutorImpl.java.
--
Michael

Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: Schema variables - new implementation for Postgres 15
Следующее
От: Andrey Lepikhov
Дата:
Сообщение: [POC] Allow an extension to add data into Query and PlannedStmt nodes