ActiveRecord で MySQL の共有レコードロックを取得する

relation.lock('LOCK IN SHARE MODE')

.lock メソッドは、引数に文字列を渡すと、それをロック句として扱ってくれる。

参考: https://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html

tags: ActiveRecord

Related Scraps:

ActiveRecord の autosave

ActiveRecord の relation 定義には、 autosave を指定できるが、その挙動のまとめ。

load_async

.load_async で起動。 グローバルなスレッドプールのコネクションを利用して、別途で ActiveRecord をロードする仕組み。

ActiveRecord のデフォルト値

ActiveRecord は、 DB のデフォルトを読み込んで、それをモデルのデフォルト値として採用する。

aws-record

AWS が提供する ruby 系の gem で、DynamoDBをバックエンドとする ORM を提供する。 DynamoDB は RDB ではないので、ActiveRecord としては提供されず、独自 ORM という形式が取られている。

Rails でカラム削除

`ignore_columns` を指定してリリースし、その状態でカラム削除して、 ignore_columns を消して再度リリースする。

Active Record Extended

Rails で DB に PostgreSQL を使う場合に、導入しておきたい ActiveRecord の拡張ライブラリ。

dependent: :destroy の実装は before_destroy

中の方で、 before_destroy によるフックで dependent: :destroy は実現されている。

has_many :rel_name, scope

rails は、 relation と relation のジョイン、と認識している様子。 具体的には、 scope 条件は、 JOIN ... ONON の中の条件に追加される。

MySQL での外部キー制約とロック

MySQL で外部キー制約を持つレコードを Create, Update (Dも?) すると、その参照先レコードに共有ロックがかかる。

MySQL のレコードロックはその走査順

排他制御のための SELECT ... FOR UPDATE は、その走査順に排他ロックを取るため、その順番が共通でないと、デッドロックを発生させがち。

paranoia

#delete メソッドと #destroy メソッドをオーバーライドするライブラリ。 default_scopeparanoia_scope まで導入してくれたりする。