Rails / PostgreSQL - Блокировка строк на основе атрибута? - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть метод generate в одном из моих контроллеров, который создает, обновляет и, возможно, уничтожает некоторые ListColumns и ListCells, оба из которых имеют list_id, который указывает на исходный List. Мне нужно убедиться, что ListColumns не изменится, пока я создаю ListCells.

Однако, поскольку генерация данных может занять некоторое время, если отдельный пользователь вызывает generate из другого списка, я бы хотел, чтобы он продолжил и создал ListColumns и ListCells для этого списка.

Итак, есть ли способ заблокировать таблицу, чтобы я не мог добавить ListColumn с определенным list_id до тех пор, пока транзакция не будет завершена?

Большое спасибо!

1 Ответ

2 голосов
/ 21 декабря 2011

Используйте сами строки таблицы list в качестве блокировок.Просто выберите строку из list в эксклюзивном режиме:

select list.list_id from list where list.list_id = ? for update

Даже если вы не собираетесь фактически обновлять эту строку, выполнение этого в начале вашего метода заблокирует любые другие выполнения с таким жеlist_id

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...