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, ...])
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM