postgres: обновлять и возвращать старые значения, избегая условий гонки - PullRequest
0 голосов
/ 16 марта 2019

Мне нужно заблокировать пользователя, пока его функция не будет выполнена, а затем разблокировать его. до сих пор, чтобы быть уверенным, чтобы избежать условий гонки, я использовал Redis. я делал это:

def lock_user_was_locked(bot, update):
    sender_id = update.message.from_user.id
    chiave = "locked:"+str(sender_id)
    stato = r.incr(chiave, amount=1)
    if stato != 1:
        update.message.reply_text(tools.langMessage(getBotLang(sender_id), "too_much_match_ops"), quote=True)
        return True
    r.expire(chiave, 10)

я видел последний фрагмент этого ответа https://stackoverflow.com/a/7927957/8372336 Я думаю, что я могу заменить свою функцию с этим запросом, используя postgres вместо redis. Кстати, я не хочу ждать, если пользователь заблокирован, поэтому я решил использовать опцию NOWAIT. но я также хочу считать его заблокированным, только если обновляется столбец «is_locked», а не вся строка (я мог бы добавить и другие столбцы для других вещей). есть ли способ рассмотреть только этот столбец для обновления без ожидания?

В противном случае я должен создать другую таблицу, имеющую только этот столбец для достижения этого?

...