Как сделать выборку, обновить для нее записи и вернуть курсор с ними?
Всем доброго времени суток, БД Postgres
В написании функций новичок.
Хочу забрать из базы N записей для обработки в Java. Это действие могут попытаться выполнить несколько разных приложений. Чтобы предотвратить ситуацию, когда несколько приложений взяли новую запись в работу и вместе ее обрабатывают есть колонка status. 0-новая запись, 1-в обработке, 2-готово.
Суть вопроса в чем - хочу селектом получить N записей, выставить им статус в 1 и передать курсор на них в Java приложение. Таким образом, другие приложения взять эти записи не смогут. Хоть убейте, не получается это сделать в функции в Postgres, видимо Java головного мозга. Можете накидать примерную последовательность действий для получения необходимого результата?
В текущем проекте прикручивать очередь не получится по некоторым причинам.
Грабли заработали, только 1 вопрос. Мы после update получаем набор значений и returning эти значения куда-то.
Подскажите пожалуйста, как вернуть их в курсор, который потом будет возвращен из функции?
Или какую можно использовать структуру данных, для хранения результатов этого returning и последующего открытия курсора?
Хочется получить функцию, которая возвращает что-то вроде этого
прикручивать очередь не получится по некоторым причинам.
Вы именно это делаете прямо сейчас, прикручиваете очередь. Почему вы можете прикрутить очередь, но не можете прикрутить такую же очередь?
Возьмите pgq, там есть функция вычитывания очередной пачки из очереди в виде курсора.
Хочется что-то вроде этого
Зачем вам это хочется?
Читаете слишком много данных и не влезаете по памяти? Читайте меньшими кусками.
Melkij, потому что я не имею возможности лезть настраивать базу
select из java я вызвать могу и могу получить необходимые данные с использованием update ... returning
Вопрос в том, как эти данные получить через курсор из функции?