Возврат обновленных полей в запросе обновления PostgreSQL

#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. Хорошо, я думаю, это то, что я хотел знать. Спасибо.