nodejs连接postgres

安装驱动

建议使用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: ‘Haikou_vegetables_project‘, // 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查询当前连接数,并且将client.release()注掉后,每调用一次函数,连接数就会+2,短时间内也不会回收。

select count(1) from pg_stat_activity

所以如果不使用client.realease()手动释放,则最多只能进行(10/2)=5次操作,程序就会阻塞。所以,在不了解具体配置potions时,一定要进行手动释放(题外话:就算程序自动回收,你信得过它吗 :)

调用

const postgres = require(./posrgres.js);(async function () { await postgres.query(SQL, [value1, value2, ...])})

相关文章