Я возился с пакетом golang sql с транзакциями, и я пытаюсь понять, как делать массовые upserts без обмена сообщениями "за каждую вставку" для каждой строки. Примеры здесь не показывают, как будут выполняться любые массовые запросы.
updateMoney, err := db.Prepare("INSERT INTO balance set money=?, id=? ON DUPLICATE UPDATE balance SET money=money+? WHERE id=?")
...
tx, err := db.Begin()
...
res, err := tx.Stmt(updateMoney).Exec(123.45, 1, 123.45, 1)
res, err := tx.Stmt(updateMoney).Exec(67.89, 2, 67.89, 2)
res, err := tx.Stmt(updateMoney).Exec(10.23, 3, 10.23, 3)
...
tx.Commit()
В идеале я мог бы взять подготовленный запрос и создать список upserts, который будет отправлен одновременно... но здесь мы получаем результат из базы данных после каждого выполнения. Любые предложения о том, как это сделать?
Изменить: Мой коллега нашел этот открытый билет, который описывает проблему... это выглядит более серьезной проблемой, чем строго в контексте транзакции.