Есть таблица в Postgres
Мне нужно добавить столбец «Код» и поля «экземпляр» и «система» из столбца «Данные jsonb».
У меня такое разочарование:
db *gorm.DB
....
db.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "Id"}},
DoUpdates: clause.AssignmentColumns([]string{"Code", "Data"}),
}).CreateInBatches(&projects, 3000).Error
В этом случае обновляется весь jsonb (включая «имя»). Есть ли способ передать AssignmentColumns, какие поля из jsonb должны быть обновлены.
После глубокого исследования выяснилось, что PostgreSQL и GORM не поддерживают напрямую обновление определенного ключа в столбце JSONB в предложении ON CONFLICT DO UPDATE.
Обычно для решения требуется получить существующие данные, объединить их с новыми данными в Go, а затем вставить их снова.
Однако мы можем попробовать другой подход, используя CreateInBatches. Мы разделяем процесс на два этапа: сначала добавляем новые проекты, если они не существуют, а затем, на втором отдельном этапе, обновляем существующие.