安装驱动
建议使用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, ...])
})