![](/img/trans.png)
[英]PG (Node-Postgres) Pool Hangs on Connect … But Only Inside Gatsby?
[英]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.