登录
首页 >  Golang >  Go问答

SQLC生成带有连接和数组的错误

来源:stackoverflow

时间:2024-03-01 16:45:26 274浏览 收藏

从现在开始,努力学习吧!本文《SQLC生成带有连接和数组的错误》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我正在使用 postgresql、golang、sqlc 开发 api 服务器。

我的sql如下

select e.*, rslt.artineve from events as e, lateral (
    select array (select art_id from arteve where arteve.eve_id = e.uid) as artineve
) rslt;

并且sqlc生成将其翻译如下

const getAllEvents = `-- name: GetAllEvents :many
SELECT e.uid, e.name, e.intro, e.phone, e.address, e.price, e.explain, e.uri, e.images, e.start_date, e.end_date, e.time_info, e.sns, e.genre, e.longitude, e.latitude, e.live, e.created_at, rslt.artineve FROM events AS e, LATERAL (
    SELECT ARRAY (SELECT art_id FROM arteve WHERE arteve.eve_id = e.uid) AS artineve
) rslt
`

type GetAllEventsRow struct {
    Uid       int64           `json:"uid"`
    TimeInfo  string          `json:"time_info"`
    Sns       json.RawMessage `json:"sns"`
    Genre     []string        `json:"genre"`
    CreatedAt time.Time       `json:"created_at"`
    Artineve  interface{}     `json:"artineve"`
}

func (q *Queries) GetAllEvents(ctx context.Context) ([]GetAllEventsRow, error) {
    rows, err := q.db.QueryContext(ctx, getAllEvents)
    if err != nil {
        return nil, err
    }
    defer rows.Close()
    var items []GetAllEventsRow
    for rows.Next() {
        var i GetAllEventsRow
        if err := rows.Scan(
            &i.Uid,
            &i.Name,
            &i.Sns,
            pq.Array(&i.Genre),
            &i.CreatedAt,
            &i.Artineve,
        ); err != nil {
            return nil, err
        }
        items = append(items, i)
    }
    if err := rows.Close(); err != nil {
        return nil, err
    }
    if err := rows.Err(); err != nil {
        return nil, err
    }
    return items, nil
}

当我在 tableplus 应用程序中测试时它可以工作。 但是,api 服务器返回的结果类似于 "artineve": "ezismth9" ,但它必须类似于 [11, 3, 4]


正确答案


添加类型提示解决了这个问题。

SELECT e.*, rslt.artineve::integer[] FROM events AS e, LATERAL (
    SELECT ARRAY (SELECT art_id FROM arteve WHERE arteve.eve_id = e.uid) AS artineve
) rslt;

理论要掌握,实操不能落!以上关于《SQLC生成带有连接和数组的错误》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>