@Shiftuia
Java-программист

Как сделать выборку, обновить для нее записи и вернуть курсор с ними?

Всем доброго времени суток, БД Postgres
В написании функций новичок.
Хочу забрать из базы N записей для обработки в Java. Это действие могут попытаться выполнить несколько разных приложений. Чтобы предотвратить ситуацию, когда несколько приложений взяли новую запись в работу и вместе ее обрабатывают есть колонка status. 0-новая запись, 1-в обработке, 2-готово.

Суть вопроса в чем - хочу селектом получить N записей, выставить им статус в 1 и передать курсор на них в Java приложение. Таким образом, другие приложения взять эти записи не смогут. Хоть убейте, не получается это сделать в функции в Postgres, видимо Java головного мозга. Можете накидать примерную последовательность действий для получения необходимого результата?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Не надо изобретать кривой велосипед с очередной очередью. Оно не будет работать под нагрузкой. Возьмите pgq.

Ну а если всё равно хотите пособирать эти грабли:
update tablename set status = 1
where status = 0 and id in (
select id from tablename where ..... order by ... limit ... for update
)
returning ...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы