Postgres возвращает [] uint8 вместо [] целого числа - PullRequest
0 голосов
/ 19 апреля 2020

Я сохраняю массив целых чисел в таблицу PostgreSQL, и при попытке получить его я всегда получаю [] uint8 вместо [] int. Я пытался использовать [] integer, [] bigint, [] smallint. ничего не работает Массив представляет максимум четыре элемента, каждый из которых находится в диапазоне от 1 до 100, без плавающей запятой.

Я использую Go, и у меня есть объект, который является [] int, это поле :

Quantity []int `json:"quantity" db:"quantity"`

Я пытаюсь это исправить, но не могу найти способ заставить PostgreSQL вернуть [] int.

Все остальные поля таблицы работают отлично. поле Quantity имеет тип integer[]

Это запрос вставки:

"INSERT INTO products (product_id, name, manufacturer, image_url, quantity, amount, notes, store_id, store_name, owner_id) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", newProduct.UID, newProduct.Name, newProduct.Manufacturer, newProduct.Image, pq.Array(newProduct.Quantity), newProduct.Amount, newProduct.Notes, newProduct.StoreID, newProduct.StoreName, newProduct.OwnerID);

Вот как я пытаюсь получить данные.

err := rows.Scan(&temp.ID, &temp.UID, &temp.Name, &temp.Manufacturer,
        &temp.Image, &temp.Amount, &temp.Notes,
        &temp.StoreID, &temp.OwnerID, &temp.StoreName, &temp.Quantity)

Проблема только в количестве. Если я заменю temp object на []uint8 вместо []int, я получу байты.

1 Ответ

4 голосов
/ 19 апреля 2020

Использование pq.Array(&temp.Quantity)

Как вы храните, вы должны извлечь также и этот путь.

err := rows.Scan(&temp.ID, &temp.UID, &temp.Name, &temp.Manufacturer,
        &temp.Image, &temp.Amount, &temp.Notes,
        &temp.StoreID, &temp.OwnerID, &temp.StoreName, pq.Array(&temp.Quantity))

И вы должны использовать поддерживаемые типы для pq.Array() также или реализуйте Сканер интерфейс. Для целого числа вы можете использовать []sql.NullInt64 или []int64. Но лучше использовать тот же поддерживаемый тип для интерфейса сканера и оценщика.

Подробнее см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...