簡體   English   中英

指定超時以使用node-postgres包連接到pg數據庫?

[英]Specify timeout to connect to pg database using node-postgres package?

我正在嘗試連接到postgres數據庫。 如果connect()花費的時間超過1/2秒,則我想超時並假定它不可用。 不幸的是,如果我將配置更改為無法訪問的主機/端口,則在獲得ETIMEDOUT之前,我會看到大約15秒的掛起時間。 在下面的代碼片段示例中,我希望它超時100%,因為連接到任何數據庫(無論是否可訪問)都將花費超過idleTimeoutMillis中指定的1ms。

// npm install pg
var pg = require("pg");
var config = {
    "host": "myAWS-RDSinstance",
    "port": 5432,
    "database": "my_db",
    "user": "postgres",
    "password": "foobar",
    "idleTimeoutMillis": 1 // one millisecond = should timeout every time
};
var pool = new pg.Pool(config );
pool.connect(function(err, client, done){
    if(err) {
        return console.error('error fetching client from pool', err);
    }
    console.log("connected. attempting query.");

    client.query("SELECT COUNT(*) FROM my_table", function(err, result){
        done(); // release client to pool

        if(err) throw err;
        console.log(result.rows[0]);
    });
});

事實證明,您需要為池的流對象設置超時,而不是池本身的超時。 以下是打開流超過半秒的流將超時並破壞流的代碼。

// npm install pg
var pg = require("pg");
var net = require("net");

var stream = new net.Stream();
stream.setTimeout(500, function(err, data){
    console.log("Reached timeout after half a second");
    stream.destroy();
});

var config = {
    "host": "myAWS-RDSinstance",
    "port": 5432,
    "database": "my_db",
    "user": "postgres",
    "password": "foobar",
    "stream": stream
};
var pool = new pg.Pool(config );
pool.connect(function(err, client, done){
    if(err) {
        return console.error('error fetching client from pool', err);
    }
    console.log("connected. attempting query.");

    client.query("SELECT COUNT(*) FROM my_table", function(err, result){
        done(); // release client to pool

        if(err) throw err;
        console.log(result.rows[0]);
    });
});

暫無
暫無

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

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