gpt4 book ai didi

mysql - 使用 Sequelize 终止正在运行的查询

转载 作者:行者123 更新时间:2023-12-03 22:21:19 24 4
gpt4 key购买 nike

我正在使用 sequelize 和 MySQL DB。我有一些繁重的查询,用户可以通过单击 GUI 中的“取消”按钮来取消这些查询。

我试图用事务来做,但是当我做 t.rollback() 时,查询不会在数据库中被杀死。有没有办法使用 sequelize 终止查询?
我更喜欢使用 sequelize 来做到这一点,但即使获取查询 ID 并手动杀死它也很好。

 .transaction(async (t) => {
if (transaction) {
transaction.rollback();
}
transaction = t;
return db.myTable.findAll(data);
})
.then((data) => {
transaction = {};

return data;
})
.catch((error) => {
transaction = {};
throw error;
});

最佳答案

Sequelize 本身不支持。有一个 open, inactive issue 可以在那里添加这种能力,带有 workaround used for PostgreSQL

const killableQuery = async (query, req, options = {}) => {
const connection = await sequelize.connectionManager.getConnection();

req.on('close', () => {
sequelize.query(`SELECT pg_terminate_backend(${connection.processID});`)
.catch((error) => {
console.error('Unable to terminate query!', error);
});
});
const result = await sequelize.query(query, {
...options,
transaction: { connection },
});

await sequelize.connectionManager.releaseConnection(connection);

return result;
};
抱歉,我找不到有关 processID 属性以及它是否与 MySQL 跟踪的属性对应的详细信息。如果是,可以用 MySQL counterpart 替换 PostgreSQL 语句,例如:
SELECT GROUP_CONCAT(CONCAT('KILL ',id,';') SEPARATOR ' ') 
FROM information_schema.processlist
WHERE user <> 'system user'
AND -- <condition based on processID>;

关于mysql - 使用 Sequelize 终止正在运行的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61659699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com