nodejs连接postgres

Posted Mr_Kahn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodejs连接postgres相关的知识,希望对你有一定的参考价值。

安装驱动

建议使用pg-pool,但要同时安装pgpg-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中如果不设置poolSizemax,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, ...])
})

以上是关于nodejs连接postgres的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 加密到 Postgres 的连接字符串

NodeJS Postgres 错误 getaddrinfo ENOTFOUND

Nodejs 应用程序的 Heroku Postgres 附加连接字符串

在nodejs中连接到heroku postgres db时出错

NodeJS/Sequelize/MySQL - 为啥需要 postgres 依赖项?

Postgres ECONNREFUSED 在 Docker Compose 上使用 NodeJS [重复]