postgresql – Postgres SSL SYSCALL error: EOF detected with python and psycopg

postgresql – Postgres SSL SYSCALL error: EOF detected with python and psycopg

The error: psycopg2.operationalerror: SSL SYSCALL error: EOF detected

The setup: Airflow + Redshift + psycopg2

When: Queries take a long time to execute (more than 300 seconds).

A socket timeout occurs in this instance. What solves this specific variant of the error is adding keepalive arguments to the connection string.

keepalive_kwargs = {
    keepalives: 1,
    keepalives_idle: 30,
    keepalives_interval: 5,
    keepalives_count: 5,
}

conection = psycopg2.connect(connection_string, **keepalive_kwargs)

Redshift requires a keepalives_idle of less than 300. A value of 30 worked for me, your mileage may vary. It is also possible that the keepalives_idle argument is the only one you need to set – but ensure keepalives is set to 1.

Link to docs on postgres keepalives.

Link to airflow doc advising on 300 timeout.

I ran into this problem when running a slow query in a Droplet on a Digital Ocean instance. All other SQL would run fine and it worked on my laptop. After scaling up to a 1 GB RAM instance instead of 512 MB it works fine so it seems that this error could occur if the process is running out of memory.

postgresql – Postgres SSL SYSCALL error: EOF detected with python and psycopg

This issue occurred for me when I had some rogue queries running causing tables to be locked indefinitely. I was able to see the queries by running:

SELECT * from STV_RECENTS where status=Running order by starttime desc;

then kill them with:

SELECT pg_terminate_backend(<pid>);

Leave a Reply

Your email address will not be published. Required fields are marked *