Postgresql 错误:无法在准备好的语句中插入多个命令
我正在尝试将一行从一个表移动到另一个表 问题是,如果我将两个查询放在一起,就会得到“错误:无法将多个命令插入到准备好的语句中”。我能做什么Postgresql 错误:无法在准备好的语句中插入多个命令,postgresql,Postgresql,我正在尝试将一行从一个表移动到另一个表 问题是,如果我将两个查询放在一起,就会得到“错误:无法将多个命令插入到准备好的语句中”。我能做什么 exports.deletePost = function(id) { return db.query(`INSERT INTO deletedjobs SELECT * FROM jobs WHERE id = $1; DELETE FROM jobs WHERE id = $1;`, [id]).then(res
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];
});
};
- 也许你不应该使用
和
子句,试试分号
代码>
- 您使用了
您应该输入列名称,因为在后面的 当您可以添加新列时,您的函数不会执行select*
db.multi
可以执行多查询字符串,您可以尝试以下操作:
db.multi(`INSERT INTO deletedjobs
SELECT *
FROM jobs
WHERE id = $1;DELETE FROM jobs WHERE id = $1`, [id])
另一方面,我认为更好的解决方案是,您应该同时将查询包装到一个函数中,以便执行insert delete操作,如下所示:
CREATE函数moveJob(id字符可变)返回void作为
$BODY$
开始
插入到deletedjobs中
挑选*
来自乔布斯
其中id=id;
从id=id的作业中删除;
结束;
$BODY$
语言plpgsql易失性安全定义程序
成本100;
并在js中将其称为postgresql函数:
db.any('select moveJob($1)'[id]);
您也可以将与。。。AS
子句()一次执行两个查询。所以它可能看起来像这样:
exports.deletePost = function(id) {
return db.query(`
WITH
A AS (SELECT * FROM jobs WHERE id = $1),
B AS (INSERT INTO deletedjobs FROM A),
DELETE FROM jobs WHERE id IN (SELECT id FROM A);
`, [id]).then(results => {
console.log("succesfull transfer");
return results.rows[0];
});
};
但当我使用分号时,我得到了这个错误“错误:无法将多个命令插入到准备好的语句中”,谢谢ThnhPhan。我刚刚尝试了您更新的解决方案,但我得到了“db.multi不是函数”我也尝试了在我的终端psql中运行该函数,但我得到了“ERROR:function result type必须指定”:/我已经更新了return in函数,您能不能再试一次Hanks Thanh,现在我创建了该函数,不幸的是,我得到了db.multi/db.any不是一个函数,因为我使用的是这个npm而不是pg-promise。谢谢,我会检查它