是否可以在Postgres pg模块

时间:2018-01-24 20:19:12

标签: node.js postgresql pg

这是我的代码,它尝试更新数据库中的记录。 但如果记录不存在那么我想插入它。 可以再次调用client.query吗?或者最好的方法是什么?

const {Pool} = require('pg');
const pool   = new Pool(POSTGRES_CONFIG);

pool.connect((err, client, release) => {
    if (err) {
        return console.error('Error acquiring client', err.stack)
    }

    ………

    client.query(query, queryValues, (err, result) => {
        release();

        if(result.rowCount<=0){
            //**** CAN I CALL IT AGAIN WITH OTHER PARAMETERS TO INSERT? ****
            client.query(....... => {
                release();

                if (err) {
                    if(err.code === POSTGRES_ERRORS.UNIQUE_VIOLATION){
                        return console.error('KEY ALREADY EXISTS');
                    } else {
                        return console.error('query error', err);
                    }
                }
            }
        }
    });
});

1 个答案:

答案 0 :(得分:2)

只要您在完成客户端后致电release,就可以了。来自文档:

  

您必须调用releaseCallback或client.release(指向   完成客户端后的releaseCallback。

所以,你可以这样做:

client.query(query, queryValues, (err, result) => {
        // don't release just yet 

        if(result.rowCount<=0){
            //**** CAN I CALL IT AGAIN WITH OTHER PARAMETERS TO INSERT? ****
            client.query(....... => {
                release(); // now you're done with the client so you can release it

                if (err) {
                    if(err.code === POSTGRES_ERRORS.UNIQUE_VIOLATION){
                        return console.error('KEY ALREADY EXISTS');
                    } else {
                        return console.error('query error', err);
                    }
                }
            }
        }
    });