Re: feature request - Mailing list pgadmin-support

From Guillaume Lelarge
Subject Re: feature request
Date
Msg-id 1314732652.2379.2.camel@localhost.localdomain
Whole thread Raw
In response to Re: feature request  (Dave Page <dpage@pgadmin.org>)
Responses Re: feature request
List pgadmin-support
On Tue, 2011-08-30 at 19:29 +0100, Dave Page wrote:
> On Tue, Aug 30, 2011 at 6:15 PM, Guillaume Lelarge
> <guillaume@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. 


-- 
Guillaume http://blog.guillaume.lelarge.info http://www.dalibo.com



pgadmin-support by date:

Previous
From: "Strauch, Sheldon"
Date:
Subject: pgAdmin3 quits unexpectedly on Mac OS/X
Next
From: Dave Page
Date:
Subject: Re: feature request