Postgresql w rzeczywistości nie obsługuje zwracania wielu zestawów wyników z jednego polecenia. Jeśli przekażesz te dane wejściowe do psql:
BEGIN;
SELECT ...;
END;
podzieli to po stronie klienta i faktycznie wykona trzy instrukcje, z których tylko druga zwraca zestaw wyników.
"POCZĄTEK" i "KONIEC" to polecenia na poziomie SQL do rozpoczęcia/zakończenia transakcji. (Może istnieć protokół niższego poziomu do robienia tego, ale nie pamiętam). Prawdopodobnie nie chcesz wydawać ich bezpośrednio, ale raczej pozwól swojemu sterownikowi (psycopg2) się tym zająć. Na przykład, z DBI Perla określam AutoCommit=>0 podczas łączenia i niejawnie wydaje "POCZĄTEK" przed moim pierwszym poleceniem; a następnie "END" (lub "COMMIT" itp.), gdy jawnie wywołam $dbh->commit; Wydaje mi się, że DB-API Pythona działa raczej w ten sposób, ponieważ inne systemy, takie jak JDBC, również działają...