Например команда box.space.tuple:upsert{...} не выполнится (ну там не верный тип данных передал, тарантул не отвечает,....) как обработать исключение в процедуре?
Предпочтительнее использовать модуль tarantool/errors
Спасибо
Немного не ясно, получается что для выполнения box.space.tuple:upsert(...) мне upsert нужно обернуть функцией ??
У объекта ошибки есть метод pcall
Ну я именно про tarantool/errors
Да, этот модуль позволяет создавать классы и объекты ошибок
Я бы не был столь категоричен Предпочтительнее всё-таки pcall/xpcall А навороты в стиле golang без статического анализа от golang скорее порождают больше ошибок
Именнованые ошибки делают код более структурированным, а пользование просто pcall без стат анализа тоже не спасает от ошибок.
Никто не мешает выбрасывать "именованные ошибки" или даже целые объекты при помощи стандартного error()
Аккуратно с upsert, в виниле он не все ошибки кидает
Пока все данные в memtx-e. Но спасибо за предупреждение.
Если у вас мемтикс, то лучше вообще без upsert
Хорошо, тогда получается нужно в транзакции это делать? Начало транзакции, читаю, если пусто то добавляю, если нет то изменяю, завершаю транзакцию?
Лучше так, это более явно, хотя операции чтения в мемткс не йилдят
Тогда смысла в транзакции нет?
Есть, как минимум для того чтобы посмотреть на этот код через неделю и понять что там имелось ввиду
Спасибо, учту
Опять же, в виниле это не так работает, поэтому нужно явно писать то что ожидается
Апсерт делался исключительно для винила Если у вас будут вторичные уникальные индексы, выйдет неудачно
Ну "исключительно" это громко, как минимум потому что появился на несколько лет раньше винила )
проблем от него больше, чем профита
Ну на борту "такого" в достатке)
Обсуждают сегодня