2017-10-10 170 views
0

我有以下疑問:如何檢查pg池是否活動/有效?

問題1:在下面的代碼,調用游泳池的任何功能之前,我該如何確保游泳池是活動?

const { Pool } = require('pg'); 
var pool = new Pool(); //global variable, used by multiple modules 

function f1(){ 
    /* 
    Check here if pool is active or not. If active, then execute following 
    code 
    */ 
    pool.connect(...) 
} 

如果我不籤,則可能如果池是不活動狀態(可能已經被其他模塊結束)會出現以下錯誤。

Error: Cannot use a pool after calling end on the pool 

查詢2:如果我不結束游泳池會發生什麼?

回答

0

查詢1:在下面的代碼中,在調用池的任何函數之前,我如何確保該池是活動的?

沒有得到你的意思是積極的。一旦你創建了池,你就可以從它獲得連接,用它來查詢數據庫。如果你想繼續使用池,不要在它上面調用end()。至於配置,可以配置超時如下 -

const pool = new Pool({ 
    host: 'localhost', 
    user: 'database-user', 
    max: 20, 
    idleTimeoutMillis: 30000, 
    connectionTimeoutMillis: 2000, 
}) 

問題2:如果我不結束池會發生什麼?

正如我在上面說的那樣,有默認超時設置。如果您沒有撥打pool.end()並且應用程序在超時時間內處於空閒狀態,連接將自動斷開。

按照文檔 -

調用pool.end會耗盡所有活動的客戶池,它們斷開,並關閉池中的任何內部定時器。通常在腳本結束時使用該池或者當您的進程試圖關閉乾淨時調用它。

更多detials參考文檔 - https://node-postgres.com/api/pool

+0

至於第一個查詢,我想知道是否有任何可能性,池可能結束/自行關閉(如果'pool.end()'還沒有已被使用)。根據[線程](https://github.com/brianc/node-postgres/issues/1477)中的討論,似乎答案是「否」。 –

+0

不確定游泳池,但其中的連接將在指定的超時後關閉。 –

+0

對於數據庫連接,它明確寫在文檔中,並且適當的事件監聽器也在那裏。我只懷疑pg池。 –