sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo romper las conexiones TCP/IP con keepalive postgreSQL sin cambiar nada en el registro?

PostgreSQL en Windows no admite la configuración de actividad para una conexión. Está usando setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, ...) que en mi humilde opinión es específico de Linux.

Puede implementar un parche para Postgres para que use SIO_KEEPALIVE_VALS . Algo así en src/backend/libpq/pqcomm.c en StreamConnection función.

{
    DWORD bytesReturned = 0;
    tcp_keepalive vals;
    vals.keepalivetime = 60*1000; /* milliseconds */
    vals.keepaliveinterval = 60*1000; /* milliseconds */
    vals.onoff = 1;
    err = WSAIoctl(
        port->sock,
        SIO_KEEPALIVE_VALS,
        (char *)&vals, sizeof(vals), NULL, 0,
        &bytesReturned, NULL, NULL);
    if (err == -1) {
        elog(LOG, "WSAIoctl(SIO_KEEPALIVE_VALS) failed: %m");
    }
}

O puede establecer la configuración de todo el sistema en el registro de Windows HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters usando KeepAliveInterval y KeepAliveTime configuración (el recuento es siempre 10 en Windows Vista y versiones posteriores).