Обсуждение: assembling PGresults from multiple simultaneous queries (libpq, singlerowmode)

Поиск
Список
Период
Сортировка

assembling PGresults from multiple simultaneous queries (libpq, singlerowmode)

От
Konstantin Izmailov
Дата:
Hi,
I'm experimenting with Postgres 10 and protocol v3. I noticed that the Postgres allows executing multiple queries simultaneously (I basically commented out a check that prevents sending another query in libpq while previous result(s) reading is not complete). Things appear like working, but I just wanted to ask if anyone else tried the same (logically separate results from multiple simultaneous queries)?

Afaik libpq was not designed for that scenario, but it seems the Postgres server supports it. Any thought or information will be appreciated.

Thank you!
Konstantin

Re: assembling PGresults from multiple simultaneous queries (libpq, singlerowmode)

От
Pavel Stehule
Дата:
Hi

ne 7. 4. 2019 v 20:47 odesílatel Konstantin Izmailov <pgfizm@gmail.com> napsal:
Hi,
I'm experimenting with Postgres 10 and protocol v3. I noticed that the Postgres allows executing multiple queries simultaneously (I basically commented out a check that prevents sending another query in libpq while previous result(s) reading is not complete). Things appear like working, but I just wanted to ask if anyone else tried the same (logically separate results from multiple simultaneous queries)?


Postgres cannot to execute simultaneous queries in one session. So queries should be executed in serial form every time.

Regards

Pavel

 
Afaik libpq was not designed for that scenario, but it seems the Postgres server supports it. Any thought or information will be appreciated.

Thank you!
Konstantin

Re: assembling PGresults from multiple simultaneous queries (libpq,singlerowmode)

От
Andres Freund
Дата:
Hi,

On 2019-04-07 20:57:56 +0200, Pavel Stehule wrote:
> ne 7. 4. 2019 v 20:47 odesílatel Konstantin Izmailov <pgfizm@gmail.com>
> napsal:
> 
> > Hi,
> > I'm experimenting with Postgres 10 and protocol v3. I noticed that the
> > Postgres allows executing multiple queries simultaneously (I basically
> > commented out a check that prevents sending another query in libpq while
> > previous result(s) reading is not complete). Things appear like working,
> > but I just wanted to ask if anyone else tried the same (logically separate
> > results from multiple simultaneous queries)?
> >
> >
> Postgres cannot to execute simultaneous queries in one session. So queries
> should be executed in serial form every time.

I think what Konstantin is really talking about is pipelining
(i.e. sending multiple queries without waiting for the results
inbetween, thereby reducing latency), and that is actually supported by
postgres. Some drivers make fairly extensive use of it (e.g. the pgjdbc
driver).

As for libpq: No, that's currently not supported. There is a patch that
I hope to get into v13 however: https://commitfest.postgresql.org/20/1317

Greetings,

Andres Freund



Re: assembling PGresults from multiple simultaneous queries (libpq, singlerowmode)

От
Konstantin Izmailov
Дата:
Yes, Andres, I meant "pipelining", just couldn't choose correct word. Thank you for the answer(s)!

I also made changes in my own copy of libpq, and they work fine. I think the pipelining support is needed in libpq. Btw, how can I get the patch code? I want to compare your approach with mine. I couldn't figure out how to get the patch from the link.

Thanks so much!


On Sun, Apr 7, 2019 at 12:21 PM Andres Freund <andres@anarazel.de> wrote:
Hi,

On 2019-04-07 20:57:56 +0200, Pavel Stehule wrote:
> ne 7. 4. 2019 v 20:47 odesílatel Konstantin Izmailov <pgfizm@gmail.com>
> napsal:
>
> > Hi,
> > I'm experimenting with Postgres 10 and protocol v3. I noticed that the
> > Postgres allows executing multiple queries simultaneously (I basically
> > commented out a check that prevents sending another query in libpq while
> > previous result(s) reading is not complete). Things appear like working,
> > but I just wanted to ask if anyone else tried the same (logically separate
> > results from multiple simultaneous queries)?
> >
> >
> Postgres cannot to execute simultaneous queries in one session. So queries
> should be executed in serial form every time.

I think what Konstantin is really talking about is pipelining
(i.e. sending multiple queries without waiting for the results
inbetween, thereby reducing latency), and that is actually supported by
postgres. Some drivers make fairly extensive use of it (e.g. the pgjdbc
driver).

As for libpq: No, that's currently not supported. There is a patch that
I hope to get into v13 however: https://commitfest.postgresql.org/20/1317

Greetings,

Andres Freund

Re: assembling PGresults from multiple simultaneous queries (libpq, singlerowmode)

От
Konstantin Izmailov
Дата:
Never mind, I found the link to the github in emails from the link. Thanks again!

Konstantin

On Sun, Apr 7, 2019 at 1:28 PM Konstantin Izmailov <pgfizm@gmail.com> wrote:
Yes, Andres, I meant "pipelining", just couldn't choose correct word. Thank you for the answer(s)!

I also made changes in my own copy of libpq, and they work fine. I think the pipelining support is needed in libpq. Btw, how can I get the patch code? I want to compare your approach with mine. I couldn't figure out how to get the patch from the link.

Thanks so much!


On Sun, Apr 7, 2019 at 12:21 PM Andres Freund <andres@anarazel.de> wrote:
Hi,

On 2019-04-07 20:57:56 +0200, Pavel Stehule wrote:
> ne 7. 4. 2019 v 20:47 odesílatel Konstantin Izmailov <pgfizm@gmail.com>
> napsal:
>
> > Hi,
> > I'm experimenting with Postgres 10 and protocol v3. I noticed that the
> > Postgres allows executing multiple queries simultaneously (I basically
> > commented out a check that prevents sending another query in libpq while
> > previous result(s) reading is not complete). Things appear like working,
> > but I just wanted to ask if anyone else tried the same (logically separate
> > results from multiple simultaneous queries)?
> >
> >
> Postgres cannot to execute simultaneous queries in one session. So queries
> should be executed in serial form every time.

I think what Konstantin is really talking about is pipelining
(i.e. sending multiple queries without waiting for the results
inbetween, thereby reducing latency), and that is actually supported by
postgres. Some drivers make fairly extensive use of it (e.g. the pgjdbc
driver).

As for libpq: No, that's currently not supported. There is a patch that
I hope to get into v13 however: https://commitfest.postgresql.org/20/1317

Greetings,

Andres Freund

Re: assembling PGresults from multiple simultaneous queries (libpq,singlerowmode)

От
Andres Freund
Дата:
Hi,

On postgres mailing lists please don't write your reply at the top of a
fully quoted email. We like the reply to be inline and trimmed to the
necessary parts.

On 2019-04-07 13:28:46 -0700, Konstantin Izmailov wrote:
> Yes, Andres, I meant "pipelining", just couldn't choose correct word. Thank
> you for the answer(s)!
> 
> I also made changes in my own copy of libpq, and they work fine. I think
> the pipelining support is needed in libpq. Btw, how can I get the patch
> code? I want to compare your approach with mine. I couldn't figure out how
> to get the patch from the link.

Hm, odd. There's a link on the page "Latest attachment" - but for
unknown reasons that's broken. I've attached it for now, but will also
inquire with the webadmin team about what's up.

Greetings,

Andres Freund

Вложения

Re: assembling PGresults from multiple simultaneous queries (libpq, singlerowmode)

От
Konstantin Izmailov
Дата:
Got it! Thanks!