Search code examples
postgresqlelixirecto

How to get an exclusive lock on a Postgres table using Ecto?


How would I get a lock on an entire Postgres table, such that no other process can update any row in the table (but can still read rows with SELECT)? I think the lock type I want is EXCLUSIVE, but I am not sure how do acquire such a lock for the entire table using an Ecto query.

Thanks!


Solution

  • Use LOCK:

    LOCK my_table IN EXCLUSIVE MODE;
    

    Note that LOCK TABLE can only be used in transaction blocks.

    See also How to use raw sql with ecto Repo