Postgresql unterstützt nicht die Rückgabe mehrerer Resultsets aus einem einzigen Befehl. Wenn Sie diese Eingabe an psql übergeben:
BEGIN;
SELECT ...;
END;
es wird dies clientseitig aufteilen und tatsächlich drei Anweisungen ausführen, von denen nur die zweite eine Ergebnismenge zurückgibt.
"BEGIN" und "END" sind Befehle auf SQL-Ebene zum Starten/Beenden einer Transaktion. (Möglicherweise gibt es dafür ein untergeordnetes Protokoll, aber ich kann mich nicht erinnern). Wahrscheinlich möchten Sie sie nicht direkt ausgeben, sondern Ihren Treiber (psycopg2) damit umgehen lassen. Zum Beispiel gebe ich mit Perls DBI beim Verbinden AutoCommit=>0 an und es gibt implizit ein "BEGIN" vor meinem ersten Befehl aus; und dann "END" (oder "COMMIT" usw.), wenn ich explizit $dbh->commit aufrufe; Ich denke, die DB-API von Python funktioniert ungefähr so, da andere Systeme wie JDBC das auch tun ...