我正在尝试将一行从一张表移动到另一张表。
问题是,如果我将两个查询放在一起,我会得到“错误:无法将多个命令插入准备好的语句”。我能做什么?
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];
});
};
最佳答案
编辑:关注Docs v7.0.0,我发现 db.multi
可以执行多查询字符串,你可以试试这个:
db.multi(`INSERT INTO deletedjobs
SELECT *
FROM jobs
WHERE id = $1;DELETE FROM jobs WHERE id = $1`, [id])
我认为更好的解决方案是将查询包装到一个同时用于插入-删除的函数中,如下所示:
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;
并在你的 js 中调用它作为 postgresql 函数:
db.any('select moveJob($1)', [id]);
关于postgresql - 错误 : cannot insert multiple commands into a prepared statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57221749/