我有以下查询,当我在psql shell中运行它时成功删除记录:
delete from schedule_set USING schedule, event WHERE (schedule.schedule_set_id = schedule_set.id) and (schedule_set.id = ${id}) and (select count(*) from event where (complete IS TRUE)) = 0 RETURNING *
我正在使用JS函数生成查询 - 这就是为什么我在查询中有$ {id},而不是调用以下内容:
return db.any(schedule.deleteSchedulesByScheduleSetId(params), params)
.catch(err => {
console.log(err);
});
当我在查询中出现语法错误时,我收到错误 - 这告诉我正在针对数据库运行查询。当我修复语法时,我没有得到任何错误,但也没有删除任何内容。
任何想法为什么或如何调试? - 谢谢
答案 0 :(得分:0)
如文档所述,方法any仅在执行查询时导致错误拒绝。如果您的DELETE
查询没有删除任何内容,则不会出错。
如果您希望DELETE
查询在没有删除任何内容时导致错误,您可以在查询结束时使用RETURNING *
,并使用{{db.result(query, values, a => a.rowCount)
.then(count => {
// count = number of rows deleted
})
.catch(error => {
// error
})
执行3}}或many,取决于预期删除(并因此返回)的记录数量。
然而,最实用的方法是不使用上述任何方法,因为返回已删除的行是额外的操作,通常是无用的。相反,您应该依赖实际删除的行数,然后采取相应的行动。
为此您可以使用方法one,将输出转换为受影响的行数(在您的情况下删除):
{{1}}