On Tue, Aug 30, 2011 at 8:30 PM, Guillaume Lelarge <guilla...@lelarge.info> wrote: > On Tue, 2011-08-30 at 19:29 +0100, Dave Page wrote: >> On Tue, Aug 30, 2011 at 6:15 PM, Guillaume Lelarge >> <guilla...@lelarge.info> wrote: >> >> >> >> libpq doesn't support multiple resultsets in a single query unfortunately. >> >> >> > >> > As a matter of fact, it does (see >> > http://pgolub.wordpress.com/2009/11/17/script-slicing-by-pgmdd/), and I >> > really want pgAdmin to use this. Still need to find a good UI and some >> > time to work on it :) >> >> Err, no it doesn't. The blog you've referenced describes how PgMDD >> takes the PostgreSQL 8.3 parser and uses it to pre-parse scripts into >> individual statements on the client, which it then executes >> individually. That's similar to what's being asked for here, but has >> the rather nasty limitation of not understanding PG 8.4+'s grammar. >> >> Libpq itself only supports a single resultset for multi-part >> statements. Even in 9.1, the docs say: >> >> The command string can include multiple SQL commands (separated by >> semicolons). Multiple queries sent in a single PQexec call are >> processed in a single transaction, unless there are explicit >> BEGIN/COMMIT commands included in the query string to divide it into >> multiple transactions. Note however that the returned PGresult >> structure describes only the result of the last command executed from >> the string. Should one of the commands fail, processing of the string >> stops with it and the returned PGresult describes the error condition. >> >> (http://www.postgresql.org/docs/9.1/static/libpq-exec.html#LIBPQ-EXEC-MAIN) >> >> In other words, only the last resultset is accessible. >> > > You're right for PQexec. And wrong for PQsendQuery, which is the one we > use on the query tool. > > And to quote the fine manual :) > (http://www.postgresql.org/docs/9.1/static/libpq-async.html#LIBPQ-PQSENDQUERY): > After successfully calling PQsendQuery, call PQgetResult one or more > times to obtain the results. PQsendQuery cannot be called again (on the > same connection) until PQgetResult has returned a null pointer, > indicating that the command is done.
Oh, I stand corrected. That's pretty neat - I had read that before I think I mis-parsed it to mean that you call PQgetResult to get more results for the one and only resultset. -- Dave Page Blog: http://pgsnake.blogspot.com Twitter: @pgsnake EnterpriseDB UK: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgadmin-support mailing list (pgadmin-support@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-support