pg-promise不会删除但不会抛出错误

时间:2017-07-07 17:55:24

标签: node.js psql pg-promise

我有以下查询,当我在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);
        });

当我在查询中出现语法错误时,我收到错误 - 这告诉我正在针对数据库运行查询。当我修复语法时,我没有得到任何错误,但也没有删除任何内容。

任何想法为什么或如何调试? - 谢谢

1 个答案:

答案 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}}