PG-承诺不会删除,但不会引发错误或者
我有以下查询成功地删除记录,当我在psql的shell中运行它:PG-承诺不会删除,但不会引发错误或者
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);
});
当我在查询语法错误我得到一个错误 - 这告诉我,该查询是被跑针对数据库。当我修复语法时,我没有收到任何错误,但是没有任何内容被删除。
任何想法为什么或如何调试? - 谢谢
方法any,如记录,只执行查询结果时拒绝错误。如果您的DELETE
查询不删除任何内容,则不是错误。
如果要产生错误的DELETE
查询时,它不会删除任何东西,你可以在查询的末尾使用RETURNING *
,并且取决于它是多少条记录要么many或one,执行它预计会正常删除(并因此返回)。
然而,最实用的方法不是使用上述任何一种方法,因为返回删除的行是额外的操作,通常是无用的。相反,你应该依靠实际删除的行数,然后采取相应的行动。
对于您会使用方法result,输出转换成受影响的行数(在你的情况下删除):
db.result(query, values, a => a.rowCount)
.then(count => {
// count = number of rows deleted
})
.catch(error => {
// error
})
我相信这里有一个误解。我不期望它会抛出一个错误。我期待这个查询删除1条记录。我之所以说没有抛出错误就是为了强调数据库没有什么抱怨,所以我不知道在哪里寻找。我打电话给我的api删除这条记录,并且记录不会被删除 - 如果我进入运行psql的终端shell并运行相同的查询并用数字替换$ {id},而不是删除记录。当我用pg-promise发送它时,查询似乎不起作用。我有道理吗? – melis
我实际上在db.result中找到了你的例子,并且之前用我替换了它,因为当没有任何东西被删除时我需要返回一个不同的状态码。 – melis
@melis在查询格式中必须是错误的。最典型的是为'$ {id}'传递一个字符串,而不是一个整数。使用[pg-monitor](https://github.com/vitaly-t/pg-monitor)来查看真正正在执行的内容,或者至少是日志事件[query](http:// vitaly-t .github.io/PG-承诺/ global.html#事件:查询)。 –
所以你'WHERE'结果中删除什么。但它仍然是一个成功的操作。为什么你期望method [any](http://vitaly-t.github.io/pg-promise/Database.html#any)返回一个错误?它不应该。如果您希望该查询返回错误,则应使用method [many](http://vitaly-t.github.io/pg-promise/Database.html#many)。 –
但它应该删除一些东西。当我用数字替换$ {id}并在psql shell中运行相同的查询时,它会按照我的预期删除4条记录。 – melis