使用pgx 在Go 中的Postgres 中批次插入:已解決
在給定的Go 程式碼中,您正在手動建立INSERT語句並執行它使用pgx.Exec。然而,這種方法效率低且容易出錯,特別是對於批量插入。
問題識別
錯誤訊息「expected 10 argument, got 1」表示提供的參數數量與資料庫預期的參數數量不符。出現此錯誤的原因是您手動建立 INSERT 語句,並且可能在參數的計數或順序中犯了錯誤。
正確方法
執行批次插入為了高效地利用 pgx 的 CopyFrom 函數,該函數利用專為此類操作設計的 PostgreSQL 複製協議。 CopyFrom 允許您將來源中的行批次插入表中。
使用 CopyFrom 的程式碼範例
package main import ( "context" "fmt" "log" "github.com/jackc/pgx/v4" ) const ( dbUrl = "db url..." ) type tempKey struct { keyVal string lastKey int } func main() { conn, err := pgx.Connect(context.Background(), dbUrl) if err != nil { log.Fatalf("Error connecting to the database: %v", err) } defer conn.Close(context.Background()) data := []tempKey{ {keyVal: "abc", lastKey: 10}, {keyVal: "dns", lastKey: 11}, {keyVal: "qwe", lastKey: 12}, {keyVal: "dss", lastKey: 13}, {keyVal: "xcmk", lastKey: 14}, } copyCount, err := conn.CopyFrom( context.Background(), pgx.Identifier{"keys"}, // Table name []string{"keyval", "lastval"}, // Column names pgx.CopyFromRows(data), // Copy from a slice of structs ) if err != nil { log.Fatalf("Error copying data to the database: %v", err) } fmt.Printf("%d rows copied successfully.\n", copyCount) }
以上是如何使用 pgx 在 Postgres 中高效執行批次插入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!