Динамическая запись данных из таблицы postgres
Всем привет Использую pgx. Вот код получения данных из таблицы в которой два столбца
func GetAll(aim, table string) (string, string) {
dbitem, _ := pgx.Connect(context.Background(), dbconn)
defer dbitem.Close(context.Background())
name, data := "", "" //вот здесь создать один интерфейс(например)
err := dbitem.QueryRow(context.Background(), "select "+aim+" from "+table).Scan(&name, &data) //здесь в интерфейс записать то, что пришло из базы.
if err != nil {
log.Fatal(err)
}
return name, data
}
func main() {
log.Println(GetAll("*", "textData"))
}
.Scan требует от меня 2 переменные, чтоб положить в них значения двух столбцов, что логично.
Но я бы хотел, не быть првязанным к количеству переменных и с помощью Scan записывать все что приходит из таблицы, допустим, в интерфейс. Чтобы не создавать переменные, не ограничиваться количеством переменных и т.д.
Как я могу это сделать? Если я использую один интерфейс, то Scan ругается что ему все равно нужен второй field. Как провернуть то что мне нужно?
Ответы (1 шт):
Поковырялся немного и, кажется, решил проблему. ЧАстично пока что, буду дальше ковырять)
package main
import (
"context"
"fmt"
"log"
"github.com/jackc/pgx/v4"
)
var dbconn = "postgres://user:pass@localhost:5432/test"
func Get(aim, table string) []string {
dbitem, _ := pgx.Connect(context.Background(), dbconn)
defer dbitem.Close(context.Background())
data, _ := dbitem.Query(context.Background(), "select "+aim+" from "+table)
var dataSlc []string
for data.Next() {
a, _ := data.Values()
for _, it := range a {
dataSlc = append(dataSlc, fmt.Sprint(it))
}
}
return dataSlc
}
func main() {
Data := Get("*", "textData")
for num, it := range Data {
log.Println(it, num)
}
}
Только не получается вернуть элементы массива(((Мне нужно их использовать в других функциях(