@Microp

Обновление нескольких моделей go pg bulk update time.Time?

Проблема заключается в том, что при обновлении одной модели все работает, а при попытке обновить несколько моделей падает ошибка о невозможности обновить дату (time.Time go object)
Деларация объекта
type Object struct {
	ID string `sql:",notnull"`
	StartAt time.Time `sql:",notnull"`
	Body string `sql:",notnull"`
}

у меня есть слайс этих объектов переданных в функцию
objects := []*Object
Обновляем время у объектов
for _, object := range objects {
	object.StartAt = time.Now()
}

далее выполняется
Рабочий код
for _, object := range objects {
		_, err := s.db.Model(&objects).Column("start_at", "body").Update()
	
		if err != nil {
			return err
		}
	}

Нерабочий код
_, err := s.db.Model(&objects).Column("start_at", "body").Update()

Вываливается ошибка
77 -> column "start_at" is of type timestamp with time zone but expression is of type text
сигнализирующая, что я пытаюсь сохранить текст вместо времени с тайм зоной

В чем проблема не совсем понятно и как её решить тоже. Если кто-то сталкивался буду благодарен совету по решению.
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
terrier
@terrier
Попробовал запустить ваш код с обновлением нескольких моделей - вроде все нормально работает.
А залогируйте, какой SQL-запрос генерирует go-pg и покажите нам.
У меня получилось
UPDATE "objects" AS "object" SET "start_at" = _data."start_at", "body" = _data."body"
                FROM (VALUES ('2019-05-16 21:14:19.579398+00:00:00'::timestamptz, 'body', '1'),
                          ('2019-05-16 21:14:19.579398+00:00:00'::timestamptz, 'body', '2')) 
                                  _data("start_at", "body", "id") WHERE "object"."id" = _data."id"

и все проходит.
go-pg, кстати, свежей версии?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы