安裝驅動
建議使用pg-pool
,但要同時安裝pg
與pg-pool
cnpm install pg pg-pool --save
編寫模塊
/**postgres.js*/
const Pool = require('pg-pool');
const config = {
user: 'postgres_user',
password: 'postgres_password',
host: 'postgres_ip',
port: 5432,
database: 'database_name',
// ssl: true
};
const pool = new Pool(config);
exports.query = (SQL, value) =>{
return new Promise((resolve, reject) => {
pool.connect((err,client) => {
if(err) reject(err);
client.query(SQL, value, (err, res) => {
// client操作完后建議手動進行釋放
client.release();
if(err) reject(err);
resolve(res);
});
});
});
};
此處注意client.release
的手動釋放操作。因為options
中如果不設置poolSize
或max
,pg-pool默認會獲得數據庫10個連接
的上限,源碼截圖如下:
而每次對數據庫的操作都會消耗2個連接
(原因未知)。可通過以下SQL查詢當前連接數。
select count(1) from pg_stat_activity
將client.release()
注掉后,每調用一次函數,連接數就會+2
,短時間內也不會回收。所以如果不使用client.realease()
手動釋放,則最多只能進行(10/2)=5
次操作,程序就會阻塞。所以,在不了解具體配置potions時,一定要進行手動釋放(題外話:就算程序自動回收,你信得過它嗎 :)
調用
const postgres = require(./posrgres.js);
(async function () {
await postgres.query(SQL, [value1, value2, ...])
})