Извлечение данных массива из столбца JSONB в PostgreSQL и его перенос в фрагмент строки In Go с использованием библиотеки pgx - PullRequest
0 голосов
/ 15 ноября 2018

Мне как-то удалось заставить это работать, но не совсем так, как предполагалось. Код ниже "poco" для данных в столбце JSONB.

type post struct {
    Title       string   `json:"title"`
    Tags        []string `json:"tags"`
}

Ниже у меня есть инициализация среза постов, а также одного поста для сканирования каждой строки в. Остальное - стандартный код запроса. это data - это имя столбца, которое объявлено как jsonb

var t post
var h []post
rows, err := conpool.Query("SELECT data FROM post")
if err != nil {
    fmt.Println(err)
}
defer rows.Close()
for rows.Next() {
    if err := rows.Scan(&t); err != nil {
        fmt.Println(err)
    }
    h = append(h, t)
}
for _, v := range h {
    fmt.Println(v.Title,v.Tags)
}

Выходные данные, которые я получаю:

First Title [qwe asd]
Second Title [qwe asd]
Third Title [qwe asd]

Как вы можете видеть выше, вывод каждого среза тега одинаков, так как срез является просто указателем на последний базовый массив, который извлекается из базы данных, перезаписывает предыдущие. Я знаю, что если я объявлю сообщение как Tags [2]string, оно будет работать, но мне нужно использовать слайс, поскольку я понятия не имею, сколько может быть тегов, какие-либо предложения по этой проблеме?

Вот как выглядит таблица

1 | {"tags": ["asd", "dsa"], "title": "First Title"}
2 | {"tags": ["tsa", "asd"], "title": "Second Title"}
3 | {"tags": ["qwe", "asd"], "title": "Third Title"}
...