从forUpdate锁解锁表

时间:2017-03-06 00:40:53

标签: knex.js

我正在使用"进行更新"在我的选择中防止种族问题。你提到锁被保存在名为" tableName_lock"的表中。使用名为is_locked的单列,您需要将其设置为0才能释放锁定。

我的表名为requests,所以我创建了一个名为" requests_lock"的表。并创建了一个名为is_locked的列。当我用于更新时,该表永远不会更新。我在这里找不到任何东西?

bookshelf.knex.transaction(function(trx) {

 var query = bookshelf.knex('requests').transacting(trx).forUpdate().select('requests.id', 'requests.CreatedTime').then(function (user_roles) {
            console.log('user_friends: %j', user_roles);  
}).then(trx.commit)
  .catch(trx.rollback);
});

1 个答案:

答案 0 :(得分:1)

SELECT FOR UPDATE锁定所选行,直到事务结束https://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE。在锁定行的事务结束之前,任何其他数据库连接都无法选择为更新选择的行。

没有使用单独的锁定表。

有问题的migrationTableName_lock表仅用于防止同时从多个不同的客户端运行迁移,而且与.forUpdate()无关。