Обходной путь для возврата значения в случае сбоя обновления - PullRequest
1 голос
/ 02 мая 2020

Я пытаюсь найти способ вернуть текущее значение ячейки, используемой в качестве условия для обновления, когда происходит то же самое обновление:

UPDATE public.streams
SET version = 1
WHERE id = '0171c6f4-7c44-43dd-ae85-530a77608d8e'::UUID
AND version = 0
RETURNING version

Проблема кода выше что RETURNING работает только в случае успеха UPDATE, и я хотел бы получить его независимо от результата (на самом деле я хотел бы получить значение version вместе с результатом (как TRUE или * 1008) *), то есть если обновление не удалось или нет).

1 Ответ

0 голосов
/ 02 мая 2020

При оптимизации c блокировка строки, если вы попытаетесь обновить строку, уже измененную другим потоком, обновление, конечно, завершится неудачей.

И теперь текущая версия строки на самом деле другая строка , а не та (по крайней мере, для базы данных).

Как правило, у вас есть два варианта:

  • Считайте, что ваши изменения устарели, и потерять их, откатив всю транзакцию.

  • Обновите sh данные и попытайтесь восстановить новые изменения, объединяя обе новые его версии, так или иначе .

Мне кажется, что вы пытаетесь реализовать последнее. В этом случае вам нужно обновить sh данных, и это обязательно означает выполнение совершенно нового SELECT ... отдельно от неудачного UPDATE, который вы пробовали. Я не думаю, что вы можете объединить оба в один запрос.

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