Не могу получить данные из базы Postgres на Golang

выполняю следующий запрос в базе:

select table_name
from information_schema.tables
where table_name ~ '^\w+_(\d{9}|\d{12})_(\w+)$'

получаю данные:

im_948727345_2c773a6ebfa6e8fa
im_948727345_f43fc0987627a8d7
im_948727345_02
im_948727345_15620eb732f93f81

пытаюсь то же самое получить через Golang:

    var oooo = `select  table_name from information_schema.tables where table_name ~ '^\w+_(\d{9}|\d{12})_(\w+)$'`

    rows, _ := db.Query(oooo)
    cols, _ := rows.Columns()

    data := make(map[string]string)

    if err != nil {

        log.Fatal(err)
        fmt.Println("Error = ", err)
    }

    if rows.Next() {
        columns := make([]string, len(cols))
        fmt.Println("Из базы", len(cols))
        columnPointers := make([]interface{}, len(cols))
        for i, _ := range columns {
            columnPointers[i] = &columns[i]
            fmt.Println("Из базы5", i)

        }

        rows.Scan(columnPointers...)

        for i, colName := range cols {
            data[colName] = columns[i]
            fmt.Println("Из базы2", data[colName])
            fmt.Println("Из базы3", columns[0])
            fmt.Println("Из базы4", cols)

        }
    }

получаю:

Из базы 1
Из базы5 0
Из базы2 im_948727345_2c773a6ebfa6e8fa
Из базы3 im_948727345_2c773a6ebfa6e8fa
Из базы4 [table_name]

Помогите разобраться в чем проблема


Ответы (1 шт):

Автор решения: Senior Pomidor

операция if выполняется один раз.
rows.Next() возвращает true если есть следующая строка и курсор перемещает на следующую строку.
строчку if rows.Next() { можно прочитать как "если есть хоть одна строка данных"

для того чтобы прочитать все строки из базы, надо пройтись несколько раз до тех пор пока rows.Next() истина.

заменяем if rows.Next() на for rows.Next()

→ Ссылка