Обсуждение: Multiple simultaneous queries on single connection

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

Multiple simultaneous queries on single connection

От
Yeb Havinga
Дата:
Hello list,

We want to access a postgres database with multiple queries / result 
sets that are read simultaneously (hence async). The documentation says 
explicitly that no new PQsendQuery can be send on the same channel 
before the pqgetresults has returned null. This means we need to use 
multiple connections.

The problem is that multiple connections (from the same application 
instance) do not share the same MVCC snapshot.

Is there a way to have two or more connections see each others 
uncommitted things?

Any thoughts?
Yeb Havinga



Re: Multiple simultaneous queries on single connection

От
Craig Ringer
Дата:
On 17/08/2009 8:49 PM, Yeb Havinga wrote:
> Hello list,
>
> We want to access a postgres database with multiple queries / result
> sets that are read simultaneously (hence async). The documentation says
> explicitly that no new PQsendQuery can be send on the same channel
> before the pqgetresults has returned null. This means we need to use
> multiple connections.
>
> The problem is that multiple connections (from the same application
> instance) do not share the same MVCC snapshot.
>
> Is there a way to have two or more connections see each others
> uncommitted things?

Not at present.

You should be able to use explicitly declared cursors and FETCH to 
interleave requests for results from one or more queries in the same 
transation using the one connection, but only one FETCH may be active at 
a time.

--
Craig Ringer


Re: Multiple simultaneous queries on single connection

От
Yeb Havinga
Дата:
Hello Craig, list
>> Is there a way to have two or more connections see each others
>> uncommitted things?
>
> Not at present.
>
> You should be able to use explicitly declared cursors and FETCH to 
> interleave requests for results from one or more queries in the same 
> transation using the one connection, but only one FETCH may be active 
> at a time.
Thanks for your info. I verified with a pl/pgsql function that from a 
pl/pgsql perspective, this is a good solution. However, our client 
application needs to access the postgres backend with libpq. I'm 
currently looking at PQsendPrepare / PQSendQueryPrepared together with 
what the exec_execute_message does. Each of these has a portal name as 
parameter. It would be nice if PQgetResult could also provide a portal 
name to fetch a result from. The question is how to multiplex data from 
different portals on the tcp/ip connection, or maybe have more than one 
tcp/ip connection per PQconn object when more than one portal is active 
at the same time.

--
Yeb