簡體   English   中英

阻止knex數據庫連接池在空閑時關閉

[英]Prevent knex database connection pool from closing when idle

我正在使用Knex.js來處理我與數據庫的連接。 我試圖阻止連接池破壞空閑的連接。

我的配置看起來像這樣

    {
      "client": "pg",
      "connection": {
        "host" : "localhost",
        "port" : "15432",
        "user" : "postgres",
        "password" : "",
        "database" : "postgres",
        "charset" : "utf8"
      },
      "pool": {
        "min" : 1,
        "max": 7,
        "idleTimeoutMillis": Number.MAX_SAFE_INTEGER
      },
      "migrations": {
        "directory": "app/database/migrations"
      }
    }

但是我仍然堅持下去

{"errno":"ETIMEDOUT","code":"ETIMEDOUT","syscall":"read"}

經過一段時間的不活動。

據我所知,當足夠的時間過去時,連接應該從池中丟棄。 因此,如果連接暫時沒有使用(這是我的情況),則池中將沒有連接,並且我嘗試的第一個調用應該在給定錯誤時失敗。 后續調用順利進行(直到新的超時)

我的問題是 - 如何防止這種情況?

編輯

在我的應用程序空閑一段時間后,必須轉到數據庫級別的第一個活動因給定錯誤而失敗。 任何重復的通話都會成功。 這就是為什么我開始相信knex沒有檢測到連接被丟棄為空閑並且它沒有及時重新連接以完成第一個查詢。 我也相信問題出在knex方面而不是數據庫方面。

所以我設法解決了

{"errno":"ETIMEDOUT","code":"ETIMEDOUT","syscall":"read"}

錯誤,通過這樣的配置

{
  "client": "pg",
  "connection": {
    .
    .
    .      
  },
  "pool": { <- this is important
    "min" : 0 
  },
}

我在https://gist.github.com/acgourley/9a11ffedd44c414fb4b8上找到了建議的解決方案

事實上,我無法理解為什么這是一個解決方案以及為什么我之前的配置無效。

要注意重要的是,這些解決方案將無法正常工作

{
  "client": "pg",
  "connection": {
    .
    .
    .      
  },
  "pool": { 
    "min" : 0,
    "max" : 7 <- this fails in the same manner
  },
}

要么

{
  "client": "pg",
  "connection": {
    .
    .
    .      
  },
  "pool": { 
    "min" : 0,
    "max" : 7 <- this fails in the same manner
    "ping": () => {... ping function ...}
  },
}

所以對我來說這看起來像是在繞過一些現有的bug ......這個bug要么是knex,要么是tarn.js,要么是node-postgres。 或者,問題可能是我從根本上不了解JS數據庫驅動程序如何工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM