首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres pgx驱动程序在提交时挂起

Postgres pgx驱动程序在提交时挂起
EN

Stack Overflow用户
提问于 2021-08-10 16:07:53
回答 1查看 91关注 0票数 1

我有一个功能,可以更新表格中的记录,并使用pgx Postgres驱动程序请求它。此函数在提交时挂起。你知道为什么会发生这样的事情吗?为什么我不能在这种情况下使用事务?

当然,因为查询是原子的,所以我可以删除事务。但它仍然不清楚-为什么会发生这种情况,以及如果我需要一个事务怎么办。

代码语言:javascript
复制
func (r *Repository) GetUpdatedItems(ctx context.Context, filters []string) ([]Item, error) {
    conn, err := r.pool.Acquire(ctx)
    // error handling
    defer conn.Release()
    
    tx, err := conn.Begin(ctx)
    // error handling
    defer func() {
        closeCtx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
        defer cancel()
        _ = tx.Rollback(closeCtx) 
    }()

    query := fmt.Sprintf(`UPDATE %s
    SET fieldOne = $1, fieldTwo = $2
    WHERE otheField = '' OR otherField IS NULL
    RETURNING fieldOne, fieldTwo, otheField, someMoreField;`,
        r.tableName, sqlArray(aggregatesTypes))

    rows, err := conn.Query(ctx, query, filters[0], filters[1])
    // error handling
    defer rows.Close()

    var retItems []reaper.Item

    for rows.Next() {

        var fieldOne string
        var fieldTwo string
        var otheField string
        var someMoreField string
        

        if err := rows.Scan(&id, &fieldOne, &fieldTwo, &otheField, &someMoreField); err != nil {
            return nil, fmt.Errorf("failed to scan item: %w", err)
        }

        item := Item{
            FieldOne:       fieldOne,
            FieldTwo:       fieldTwo,
            OtheField:      otheField,
            SomeMoreField:  someMoreField
        }

        retItems = append(retItems, item)
    }

    if err := tx.Commit(ctx); err != nil {
        return nil, fmt.Errorf("failed to commit transaction: %w", err)
    }
    
    return retItems, nil
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-10 16:47:16

必须使用tx.Query而不是conn.Query

谢谢你的帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68730148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档