PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres-SSL-SYSCALL-Fehler:EOF mit Python und psycopg erkannt

Der Fehler:psycopg2.operationalerror: SSL SYSCALL error: EOF detected

Das Setup:Luftstrom + Rotverschiebung + psycopg2

Wann:Abfragen dauern lang Ausführungszeit (mehr als 300 Sekunden).

In diesem Fall tritt ein Socket-Timeout auf. Was diese spezielle Variante des Fehlers löst, ist das Hinzufügen von Keepalive-Argumenten zur Verbindungszeichenfolge.

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

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

Redshift erfordert ein keepalives_idle von weniger als 300. Ein Wert von 30 hat für mich funktioniert, Ihr Kilometerstand kann variieren. Es ist auch möglich, dass der keepalives_idle Argument ist das einzige, das Sie setzen müssen - aber stellen Sie sicher, dass keepalives auf 1 gesetzt.

Link zu Dokumenten zu Postgres-Keepalives.

Link zum Airflow-Dokument mit Hinweisen zum 300-Timeout.