亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 pgx.CopyFrom 將 csv 數據批量插入到 postgres 數據庫中

使用 pgx.CopyFrom 將 csv 數據批量插入到 postgres 數據庫中

Go
溫溫醬 2022-12-19 19:55:14
我再次嘗試將大量 csv 數據推送到 postgres 數據庫中。過去,我創建了一個結構來保存數據,并在將數據放入數據庫表之前將每一列解壓縮到結構中,這工作正常,但是,我剛剛找到 pgx.CopyFrom* 并且看起來好像我應該能夠讓它更好地工作。到目前為止,我已經將表的列標題放入一段字符串中,將 csv 數據放入另一段字符串中,但我無法計算出將其推入數據庫的語法。我發現這篇文章有點像我想要的,但使用 [][]interface{} 而不是 []strings。我到目前為止的代碼是// loop over the lines and find the first one with a timestampfor {                        line, err := csvReader.Read()                           if err == io.EOF {            break        } else if err != nil {           log.Error("Error reading csv data", "Loading Loop", err)        }       // see if we have a string starting with a timestamp       _, err := time.Parse(timeFormat, line[0])       if err == nil {          // we have a data line          _, err := db.CopyFrom(context.Background(), pgx.Identifier{"emms.scada_crwf.pwr_active"}, col_headings, pgx.CopyFromRows(line))          }   }}但是 pgx.CopyFromRows 期望 [][]interface{} 而不是 []string。語法應該是什么?我是不是找錯樹了?
查看完整描述

1 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

我建議閱讀您的 CSV 并為您閱讀的每條記錄創建一個[]interface{},將其附加[]interface{}到行集合 ( [][]interface{}),然后將行傳遞給 pgx。


var rows [][]interface{}


// read header outside of CSV "body" loop

header, _ := reader.Read()


// inside your CSV reader "body" loop...

    row := make([]interface{}, len(record))


    // use your logic/gate-keeping from here


    row[0] = record[0] // timestamp


    // convert the floats

    for i := 1; i < len(record); i++ {

        val, _ := strconv.ParseFloat(record[i], 10)

        row[i] = val

    }


    rows = append(rows, row)


...


copyCount, err := conn.CopyFrom(

    pgx.Identifier{"floaty-things"},

    header,

    pgx.CopyFromRows(rows),

)

我無法模擬整個程序,但這里有一個將 CSV 轉換為 https://go.dev/play/p/efbiFN2FJMi 的[][]interface{}完整演示。


并查看文檔https://pkg.go.dev/github.com/jackc/pgx/v4。


查看完整回答
反對 回復 2022-12-19
  • 1 回答
  • 0 關注
  • 405 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號