sql >> Databáze >  >> RDS >> PostgreSQL

Jak přerušit připojení TCP/IP pomocí keepalive postgreSQL, aniž byste cokoli změnili v registru?

PostgreSQL ve Windows nepodporuje nastavení udržování pro jedno připojení. Používá setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, ...) který je IMHO specifický pro Linux.

Můžete implementovat opravu pro Postgres tak, aby používal SIO_KEEPALIVE_VALS . Něco takového v src/backend/libpq/pqcomm.c v StreamConnection funkce.

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

Nebo můžete nastavit celosystémová nastavení v registru Windows HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters pomocí KeepAliveInterval a KeepAliveTime nastavení (počet je vždy 10 ve Windows Vista a novějších).




  1. Jak mohu vybrat celý řádek, který má největší ID v tabulce?

  2. Hledejte podobná slova pomocí rejstříku

  3. Použití MySQL Galera Cluster Replication k vytvoření geograficky distribuovaného clusteru:Část druhá

  4. Proč nemohu použít proměnné vazby v příkazech DDL/SCL v dynamickém SQL?