Sau một cuộc đấu tranh lâu dài và tàn khốc, tôi nghĩ rằng tôi đã khắc phục sự cố này bằng cách đơn giản thực hiện chiến lược mà những người khác đang nói đến, nhưng sử dụng chính chức năng kết nối psycopg2:
from psycopg2 import connect
conn = connect(
database=database,
user=username,
password=password,
host=hostname,
port=port,
connect_timeout=3,
# https://www.postgresql.org/docs/9.3/libpq-connect.html
keepalives=1,
keepalives_idle=5,
keepalives_interval=2,
keepalives_count=2)
Tôi đã thấy psycopg2 bị treo liên tục trên các truy vấn chạy dài, nhưng bây giờ vấn đề dường như đã được giải quyết hoàn toàn.
Lưu ý rằng đây có thể là chức năng mới, vì câu hỏi này đã cũ.