2016-11-18 1 views
0

postgres 데이터베이스에 연결하려고합니다. connect()에 1/2 초 이상 걸리는 경우 시간 제한을 설정하고 사용할 수 없다고 가정합니다. 불행히도, 설정을 도달 할 수없는 호스트/포트로 변경하면, ETIMEDOUT을 얻기 전에 약 15 초의 정지 시간이 표시됩니다. 다음 코드 스 니펫 예제에서는 모든 데이터베이스에 연결할 수 있는지 여부에 관계없이 idleTimeoutMillis에 지정된 1ms보다 오래 걸리므로 100 % 시간 초과가 예상됩니다.node-postgres 패키지를 사용하여 pg 데이터베이스에 연결할 시간 제한을 지정 하시겠습니까?

// 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]); 
    }); 
}); 

답변

0

풀의 스트림 객체에 대한 시간 초과를 설정해야하며 풀 자체의 시간 초과는 설정하지 않아야합니다. 아래는 스트림이 0.5 초 이상 열려있는 경우 스트림을 시간 초과 및 파괴하는 코드입니다.

// 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]); 
    }); 
}); 
+0

이 솔루션과 관련된 문제가 있습니다. 풀 안에 새로운 클라이언트가 생성되면 (config 객체가 pg.Client에 내부적으로 전달되기 때문에) 동일한 스트림 인스턴스를 사용하려고 시도합니다. "/ usr/bin/nodejs [8673] : ../src /stream_base.h:233:void node :: StreamBase :: Consume() : 어설 션'(consumed_) == (false) '이 실패했습니다. – federicojasson