#sql #database #postgresql
#sql #База данных #postgresql
Вопрос:
Допустим, у меня ситуация, когда два возможных клиента могут выполнять один и тот же запрос на обновление строки, и я хочу знать, какой клиент на самом деле выиграл, чтобы предотвратить повторение состояния гонки / одного и того же действия несколько раз.
Есть ли способ UPDATE
, которым запрос может возвращать поля, которые были фактически изменены во время этой операции?
Например, если у меня есть следующий запрос, в котором строка с идентификатором 8728
содержит поле has_payment_method=false
:
UPDATE organizations set has_payment_method = true where id = 8728;
Этот запрос вернет поля has_payment_method=true
И если я снова выполню этот запрос, он не вернет никаких полей (потому что поля не были обновлены).
Возможно ли это вообще?
Комментарии:
1. Да, предложение вызывается
RETURNING
.2.
RETURNING has_payment_method
всегда возвращает поле независимо от того, действительно ли это поле изменилось. Я хочу, чтобы он возвращался только в том случае, если значение поля изменилось.3. » он не вернет никаких полей, потому что поля не были обновлены » — это неверное предположение. Столбец всегда будет обновляться. Единственный способ не обновлять что-либо — это фильтровать строку через
where
предложение4. Хорошо, я думаю, это то, что я хотел знать. Спасибо.