Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: cannot insert multiple commands into a prepared statement

Tags:

postgresql

I am trying to move a row from one table to another.

The problem is that if I put both queries together, I get "error: cannot insert multiple commands into a prepared statement". What can I do?

exports.deletePost = function(id) {
    return db.query(`INSERT INTO deletedjobs
    SELECT *
    FROM jobs
    WHERE id = $1;

    DELETE FROM jobs WHERE id = $1;`, [id]).then(results => {
        console.log("succesfull transfer");
        return results.rows[0];
    });
};

1 Answers

EDIT: Following Docs v7.0.0, I found out db.multi can execute a multi-query string, you can try this:

db.multi(`INSERT INTO deletedjobs
    SELECT *
    FROM jobs
    WHERE id = $1;DELETE FROM jobs WHERE id = $1`, [id])

Other way I think the better solution is that you should wrap the query into a function for insert-delete at same time, like below:

CREATE FUNCTION moveJob(id character varying) RETURNs void AS
$BODY$
BEGIN
    INSERT INTO deletedjobs
    SELECT *
    FROM jobs
    WHERE id = id;

    DELETE FROM jobs WHERE id = id;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER
  COST 100;

And call it as postgresql function in your js:

db.any('select moveJob($1)', [id]);
like image 102
TLePhan Avatar answered Feb 01 '26 12:02

TLePhan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!