PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để ngắt kết nối TCP / IP bằng keepalive postgreSQL mà không cần thay đổi bất kỳ thứ gì trong sổ đăng ký?

PostgreSQL trên Windows không hỗ trợ cài đặt lưu giữ cho một kết nối. Nó đang sử dụng setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE, ...) IMHO dành riêng cho Linux.

Bạn có thể triển khai bản vá cho Postgres để nó sử dụng SIO_KEEPALIVE_VALS . Một cái gì đó như thế này trong src/backend/libpq/pqcomm.c trong StreamConnection chức năng.

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

Hoặc bạn có thể đặt cài đặt toàn hệ thống trong sổ đăng ký Windows HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters sử dụng KeepAliveInterval KeepAliveTime cài đặt (số lượng luôn là 10 trên Windows Vista trở lên).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pg_escape_string chính xác làm được gì?

  2. Tại sao phải chỉ định độ dài cho các loại ký tự khác nhau

  3. Hiểu hiệu suất truy vấn PostgreSQL

  4. Làm cách nào để chuyển CŨ, MỚI và số nhận dạng để THỰC HIỆN trong một hàm kích hoạt?

  5. Làm cách nào để tạo một trình kích hoạt để cập nhật một cột trong một bảng khác?