我需要一种方法来拒绝此代码中的pg-promise:
return t.none(insert);
此行需要很长时间,用户可以结束连接:
req.on('close', function () {
promise.reject('Connection Closed');
});
所以,我想要一种方法来结束执行并在此事件中进行回滚:
{{1}}
答案 0 :(得分:1)
通过插入进行分页/限制,并在每个插入之间检查是否需要中断事务,如果是,则抛出错误,事务将结束。
因此,例如,您可以执行10次1000行的插入,而不是在单个插入中插入10,000行。它的执行速度会慢一点,但会使您的事务中断而不会有很大的延迟。
如果所有数据都在内存中,您可以通过序列对数据进行分页,如Data Imports所示,或者通过简单的循环进行分页。
在我的代码中,所有行都在内存中,我如何对插入进行分页?
db.tx(async t => {
while(/* there is data */) {
// get the next set of rows from memory;
const insert = pgPromise.helpers.insert(data, dataset_data_columns);
await t.none(insert)
.then(() => {
if(/* need to interrupt */) {
throw new Error('Interrupting transaction');
}
});
}
}).then().catch();