Postgresql thực sự không hỗ trợ trả về nhiều tập kết quả từ một lệnh duy nhất. Nếu bạn chuyển đầu vào này cho psql:
BEGIN;
SELECT ...;
END;
nó sẽ chia nhỏ phía máy khách và thực thi ba câu lệnh, chỉ câu lệnh thứ hai trả về một tập hợp kết quả.
"BEGIN" và "END" là các lệnh cấp SQL để bắt đầu / kết thúc một giao dịch. (Có thể có một giao thức cấp thấp hơn để thực hiện việc này nhưng tôi không thể nhớ). Bạn có thể không muốn phát hành chúng trực tiếp, nhưng để trình điều khiển của bạn (psycopg2) xử lý việc này. Ví dụ, với DBI của Perl, tôi chỉ định AutoCommit => 0 khi kết nối và nó ngầm đưa ra "BEGIN" trước lệnh đầu tiên của tôi; và sau đó "KẾT THÚC" (hoặc "COMMIT", v.v.) khi tôi gọi rõ ràng $ dbh-> commit; Tôi đoán DB-API của Python hoạt động khá giống như vậy, vì các hệ thống khác như JDBC cũng hoạt động ...