使用 postgres 和 node js 在单个语句中执行多个查询

Abd*_*naf 11 sql postgresql node.js

我需要在这样的单个语句中执行插入和删除查询

INSERT INTO COMPANY (ID,NAME) VALUES (1, 'Paul');DELETE FROM  COMPANY WHERE ID='12';
Run Code Online (Sandbox Code Playgroud)

这是我用于执行查询的 node.js 代码

pg.connect(pgConString, function (err, client, done) {
        if (err) {
            callBack("DB connection failed. " + err, null);
            return;
        }
        var query = client.query({
            text: "INSERT INTO COMPANY (ID,NAME) VALUES (1, 'Paul');DELETE FROM  COMPANY WHERE ID='12';"
            values: [1, "Poul1"],
            name: "insertQuery"
        });
        query.on("error", function (err) {
            callBack("DB insertion failed. Error Message: " + err, null);
            return;
        });

        query.on('end', function (result) {

            done();
            return;
        });
    });
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误信息

错误:无法在准备好的语句中插入多个命令

是否可以使用 node.js 在 postgresql 数据库中执行多个查询?

n3k*_*3ko 8

尽管有一个公认的答案,但它有点过时了。目前,node-postgres 在一次调用中处理多个查询,并向您返回一个整洁的小数组,例如:

const db.query('select 1; select 2; select 3;')
results.map(r => (r.rows[0]['?column?']))
// [ 1, 2, 3 ]
Run Code Online (Sandbox Code Playgroud)

还有一个替代的“自以为是”库,称为pg-promisesql ,它也可以在一次调用中接受查询链,并且也可以处理文件。


ana*_*p a 3

尝试这样

pg.connect(pgConString, function (err, client, done) {
    if (err) {
        callBack("DB connection failed. " + err, null);
        return;
    }
    client.query({
        text: "INSERT INTO COMPANY (ID,NAME) VALUES (1, 'Paul');",
        values: [1, "Poul1"],
        name: "insertQuery"
    });

    client.query({
        text: "DELETE FROM  COMPANY WHERE ID='12';",
        name: "deleteQuery"
    });

    client.on("error", function (err) {
        callBack("DB insertion failed. Error Message: " + err, null);
        return;
    });


});
Run Code Online (Sandbox Code Playgroud)

  • 警告:由于上面的每个查询都是异步操作,因此您不能指望它们按写入的顺序完成。如果不需要控制流量的话就可以了。但如果确实如此,请使用回调、promise 或 async/await 来控制流程。[node-postgres 文档](https://node-postgres.com/features/queries) 中的示例 (13认同)