将Postgresql数组直接读入Golang Slice

p_m*_*mcp 14 postgresql go

我有一个查询返回一行,其中包含一个包含字符串数组的列(character varying[]):

{http://wp.me/p62MJv-Jc,http://tyrant.click/1LGBoD6}
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以直接将其读入Golang切片?例如

var arr []string

for rows.Next() {
    rows.Scan(&arr)
    fmt.Println(len(arr))
}
Run Code Online (Sandbox Code Playgroud)

生产:

0
Run Code Online (Sandbox Code Playgroud)

Pra*_*sha 12

我认为这应该可以胜任.在sql中使用array_to_json.然后将json-string 解组为golang切片

sql-> select array_to_json(arr) from ....

var arrStr string
var arr []string

for rows.Next() {
    rows.Scan(&arrStr)
    json.Unmarshal([]byte(arrStr), &arr)
    fmt.Println(len(arr))
}
Run Code Online (Sandbox Code Playgroud)


luk*_*eic 8

正如Victor在原帖中的评论中提到的那样,这篇文章很好地回答了这个问题pq.Array().

直接从链接中获取:

要将Postgres数组值读入Go切片,请使用:

func getTags(db *sql.DB, title string) (tags []string) {
    // the select query, returning 1 column of array type
    sel := "SELECT tags FROM posts WHERE title=$1"

    // wrap the output parameter in pq.Array for receiving into it
    if err := db.QueryRow(sel, title).Scan(pq.Array(&tags)); err != nil {
        log.Fatal(err)
    }

    return
}
Run Code Online (Sandbox Code Playgroud)

我刚刚在我自己的项目中工作,所以可以确认它是有效的.

  • 请注意,“pq.Array()”仅适用于“[]bool”、“[]float64”、“[]int64”或“[]string”。通过代码源很容易检查这一点。 (3认同)