Thread: Multiple simultaneous queries on single connection
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
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
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