module

Clear::SQL::Query::Lock

Instance methods

clear_lock

remove lock directive.

Source
with_lock(str : String = "FOR UPDATE")

You can use lock using with_lock method on query collection:

Clear::SQL.transaction do
  # SELECT * FROM users WHERE organization = 'Crystal Lang' FOR UPDATE
  User.where(organization: "Crystal Lang").with_lock.each do |user|
    # Do something with your users
  end
end

with_lock offers optional parameters (default: "FOR UPDATE"), to setup the lock options you want (ex: with_lock("FOR UPDATE SKIP LOCKED"))

See PostgreSQL deep explanation about locking here.

{% hint style="warning" %} Locking works only in transaction. {% endhint %}

Source