почему метод Save всегда вызывает инсерт? В доке вижу, что должен быть update, если primary key присутсвует, в ином случае инсерт, но по какой-то причине в логах всегда вижу только insert, даже если праймари кей в модели присутсвует. Не сталкивался никто с таким?
upsert, он же INSERT ... ON CONFLICT UPDATE
ага, всегда апсерт, если конкретнее, но в доке вижу, что должно быть "Save is a combination function. If save value does not contain primary key, it will execute Create, otherwise it will execute Update (with all fields).", хотя в логах вообще не вижу апдейты
Если СУБД поддерживает upsert, то зачем делать несколько запросов?
А почему несколько запросов? Тут либо апдейт либо инсерт (?), плюсом кое какие нюансы есть с некоторыми поведения апсертов
Без механизма upsert будет два запроса: 1. insert; 2. если получили ошибку целостности, то update
да вроде бы просто "предзапросная" проверка на наличие первичного ключа и оттуда уже выбор запроса(?)
Подай сигнал если тебя держат в плену
приведите пример
ну если во внутренности Save метода залезть, то он проверяет, что первичное поле (т.е поле с тегом primaryKey) не нулевое и делает апдейт и только в противном случае инсерт/апсерт, но я в логах вижу, что даже при наличии первоичного ключа делает инсерт/апсер
А если первичное поле uuid/string, который генерится на стороное приложения?
в моем случае оно всегда с gorm.Model, т.е интовое. Мб как-то с типом связано? Хз
Если решать задачу в общем виде, то проверка на пустое/не пустое поле не очень работает
не, это горм так рулит на своем уровне, точнее должен, но чет апдейты никогда не происходят
Обсуждают сегодня