2017-03-06 102 views
0

我正在使用「for update」來防止在我的選擇中出現種族問題。您提到鎖被保存在名爲「tableName_lock」的表中,其中一列名爲is_locked,您需要將其設置爲0才能釋放鎖。從forUpdate鎖解鎖表

我的表被稱爲請求,所以我創建了一個名爲「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); 
}); 

回答

0

SELECT FOR UPDATE鎖定選定的行,直到事務結束https://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE。在鎖定行的事務結束之前,不能通過任何其他數據庫連接選擇要更新的行。

沒有使用單獨的鎖定表。

migrationTableName_lock表中提到的表格僅用於防止同時從多個不同客戶端運行遷移,它與.forUpdate()無關。