How do I batch sql statements with package database/sql

前端 未结 12 2669
深忆病人
深忆病人 2020-12-04 16:46

How do I batch sql statements with Go\'s database/sql package?

In Java I would do it like this :

// Create a prepared statement
String sql = \"INSERT         


        
12条回答
  •  天命终不由人
    2020-12-04 17:21

    I got pq.CopyIn working, and it's actually 2.4x faster than the string values/args approach (which was super helpful and an elegant solution, btw, so thank you!)

    I inserted 10 million test values of int, varchar into a struct, and loaded it with the following function. I'm kinda new to GoLang, so bear with me ...

    func copyData(client *client.DbClient, dataModels []*dataModel) error{
        db := *client.DB
        txn, err := db.Begin()
        if err != nil {
            return err
        }
        defer txn.Commit()
    
        stmt, err := txn.Prepare(pq.CopyIn("_temp", "a", "b"))
        if err != nil {
            return(err)
        }
    
        for _, model := range dataModels{
            _, err := stmt.Exec(model.a, model.b)
            if err != nil {
                txn.Rollback()
                return err
            }
        }
    
        _, err = stmt.Exec()
        if err != nil {
            return err
        }
    
        err = stmt.Close()
        if err != nil {
            return err
        }
    
        return nil
        }
    

    `

    Elapsed (stringValues/args): 1m30.60s.

    Elapsed (copyIn): 37.57s.

提交回复
热议问题