Postgresql in realtà non supporta la restituzione di più set di risultati da un singolo comando. Se passi questo input a psql:
BEGIN;
SELECT ...;
END;
dividerà questo lato client ed eseguirà effettivamente tre istruzioni, solo la seconda delle quali restituisce un set di risultati.
"BEGIN" e "END" sono comandi a livello SQL per avviare/terminare una transazione. (Potrebbe esserci un protocollo di livello inferiore per farlo, ma non riesco a ricordare). Probabilmente non vuoi emetterli direttamente, ma piuttosto lasciare che il tuo driver (psycopg2) gestisca questo. Ad esempio, con il DBI di Perl specifico AutoCommit=>0 durante la connessione ed emette implicitamente un "BEGIN" prima del mio primo comando; e poi "END" (o "COMMIT" ecc.) quando chiamo esplicitamente $dbh->commit; Immagino che la DB-API di Python funzioni in questo modo, poiché lo fanno anche altri sistemi come JDBC...