sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur bryter man TCP/IP-anslutningar med keepalive postgreSQL utan att ändra något i registret?

PostgreSQL på Windows stöder inte keepalive-inställningar för en anslutning. Den använder setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, ...) som är IMHO Linux-specifik.

Du kan implementera en patch för Postgres så att den använder SIO_KEEPALIVE_VALS . Något liknande detta i src/backend/libpq/pqcomm.c i StreamConnection funktion.

{
    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");
    }
}

Eller så kan du ställa in systemomfattande inställningar i Windows-registret HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters med KeepAliveInterval och KeepAliveTime inställningar (antalet är alltid 10 på Windows Vista och senare).




  1. Hur kan jag bli av med oönskade tomma XML-taggar?

  2. Hur kontrollerar jag om mysql-posten är tom i PhP?

  3. Hur standardiseras flera värden i kolumnen?

  4. Uppdatera tabell 1 från tabell 2