PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como quebrar conexões TCP/IP mantendo o postgreSQL sem alterar nada no registro?


O PostgreSQL no Windows não oferece suporte a configurações de manutenção de atividade para uma conexão. Ele está usando setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, ...) que é específico do IMHO Linux.

Você pode implementar um patch para o Postgres para que ele use SIO_KEEPALIVE_VALS . Algo assim em src/backend/libpq/pqcomm.c em StreamConnection função.
{
    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");
    }
}

Ou você pode definir as configurações de todo o sistema no registro do Windows HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters usando KeepAliveInterval e KeepAliveTime configurações (a contagem é sempre 10 no Windows Vista e posterior).