0

Why call rows.Close() takes too long time when I call it after I exit from loop rows.Next() before processing all elements of loop.
Its happen when I make request which returns huge amount of data (around 300 000 rows).
This problem doesn't exists when amount of rows is not so big.

func SelectHugeAmountOfRows() {
    query := `SELECT * FROM big_table`
    rows, _ := Conn.Query(context.Background(), query)
    defer func() {
        fmt.Println("Start close rows")
        start := time.Now()
        rows.Close()
        duration := time.Since(start)
        fmt.Println("rowsClose duration:", duration)
    }()

    for rows.Next() {
        rowValues, err := rows.Values()
        if err != nil {
            fmt.Println(err)
            return
        }

        // do something with rowValues and get error in process
        err = func() error {
            fmt.Println(rowValues)
            return errors.New("some error")
        }()

        if err != nil {
            return
        }
    }

    if err := rows.Err(); err != nil {
        fmt.Println(err)
        return
    }
}

rowsClose duration: 1m2.5488669s
Interesting that duration of rows.Close() in this case in same as duration which I will have if will process all elements of rows.Next() loop without break it.

StasVo
  • 554
  • 6
  • 6

0 Answers0