Как сделать UPDATE ... SET MAX(column, 5) в tarantool
Собственно есть задача - собирать статистику использования, из основных полей: cnt, value, max, min
Хотел все сделать через один запуск upsert cnt ставится через '+' value через '='
вот на max, min - споткнулся, из чего сложился вопрос:
- Есть ли простой вариант сделать свою функцию для upsert (lua, которая получала бы старое и новое значение и выдавала бы результат)
- Или можно сделать аналогичную функцию, которая будет получать весь кортеж, новые данные и сама обновлять соответствующие значения.
Ответы (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