Как сделать UPDATE ... SET MAX(column, 5) в tarantool

Собственно есть задача - собирать статистику использования, из основных полей: cnt, value, max, min

Хотел все сделать через один запуск upsert cnt ставится через '+' value через '='

вот на max, min - споткнулся, из чего сложился вопрос:

  1. Есть ли простой вариант сделать свою функцию для upsert (lua, которая получала бы старое и новое значение и выдавала бы результат)
  2. Или можно сделать аналогичную функцию, которая будет получать весь кортеж, новые данные и сама обновлять соответствующие значения.

Ответы (1 шт):

Автор решения: Shinkarenko Herman

Нашел ответ на свой вопрос:

Просто делаем функцию-триггер before_replace на space, которая при отсутствии старого значения возвращает новое, иначе - модифицированное. Примерно вот так:

function trigger_before_update_space1 (old, new)
    return old and box.tuple.new({
        new[1],
        new[2],
        math.max(old[3], new[2])
    }) or new
end       
→ Ссылка