Go语言 使用pgx扫描范围类型

nbnkbykc  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(117)

我有一个类型为int4range的列,想用pgx扫描它。我将类型定义为pgtype.Int4range,但我看到错误

cannot assign &{{18 2} {86 2} i e 2} to **int64

字符串
我所做的只是

for rows.Next() {
....
err = rows.Scan(
... 
&healthRange)


我是不是漏掉了什么?

j2qf4p5b

j2qf4p5b1#

Scan从当前行读取值到dest值位置。很可能是传递给Scan的参数与行中的列不匹配。
以下是该问题的复制者:

package main

import (
    "fmt"

    "github.com/jackc/pgx"
    "github.com/jackc/pgx/pgtype"
)

func main() {
    conn, err := pgx.Connect(pgx.ConnConfig{
        Host:     "localhost",
        Port:     5432,
        User:     "username",
        Password: "password",
    })
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    var (
        healthRange pgtype.Int4range
        anotherVar  *int64
    )
    row := conn.QueryRow(`select '[18,86)'::int4range, 2`)
    err = row.Scan(&anotherVar, &healthRange)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%+v", healthRange)
}

字符串
错误消息为:

panic: can't scan into dest[0]: cannot assign &{{18 2} {86 2} i e 2} to **int64


应用此更改以修复问题:

- row.Scan(&anotherVar, &healthRange)
+ row.Scan(&healthRange, &anotherVar)


顺便说一句,pgtype.Int4rangegithub.com/jackc/pgx@v3中,它于2017年首次发布。请考虑升级到最新版本github.com/jackc/pgx/v5

相关问题