使用 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中文网其他相关文章!