Postgresqlは、実際には1つのコマンドから複数の結果セットを返すことをサポートしていません。この入力をpsqlに渡す場合:
BEGIN;
SELECT ...;
END;
これをクライアント側に分割し、実際に3つのステートメントを実行し、そのうちの2番目だけが結果セットを返します。
「BEGIN」と「END」は、トランザクションを開始/終了するためのSQLレベルのコマンドです。 (これを行うための低レベルのプロトコルがあるかもしれませんが、私は覚えていません)。おそらく直接発行するのではなく、ドライバー(psycopg2)にこれを処理させます。たとえば、PerlのDBIでは、接続時にAutoCommit => 0を指定すると、最初のコマンドの前に暗黙的に「BEGIN」が発行されます。次に、$ dbh-> commitを明示的に呼び出すと、「END」(または「COMMIT」など)になります。 JDBCなどの他のシステムも同様に機能するため、PythonのDB-APIはこのように機能すると思います...