2017-03-06 14 views
0

私の選択でレースの問題を防ぐために "更新用"を使用しています。あなたは、そのロックは、ロックを解放するために0に設定する必要があるis_lockedという単一の列を持つ "tableName_lock"というテーブルに保存されていることを言います。ロック解除テーブル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を終了するまで、選択した行をロックします。更新のために選択された行は、行をロックしていたトランザクションが終了するまで、他のdb接続では選択できません。

個別のロックテーブルは使用されていません。

上記のmigrationTableName_lockテーブルは、複数の異なるクライアントからの移行が同時に行われないようにするためにのみ使用され、.forUpdate()とは関係ありません。

関連する問題