Heim > Artikel > Backend-Entwicklung > Wie führt man mithilfe von pgx effizient Masseneinfügungen in Postgres mit Go durch?
Massen-INSERT in Postgres in Go mit pgx: Behoben
Im angegebenen Go-Code erstellen Sie manuell eine INSERT-Anweisung und führen sie aus es mit pgx.Exec. Dieser Ansatz kann jedoch ineffizient und fehleranfällig sein, insbesondere bei Masseneinfügungen.
Problemidentifizierung
Die Fehlermeldung „10 Argumente erwartet, 1 erhalten“ weist auf ein Nichtübereinstimmung zwischen der Anzahl der bereitgestellten Argumente und den von der Datenbank erwarteten. Dieser Fehler tritt auf, weil Sie die INSERT-Anweisung manuell erstellen und möglicherweise einen Fehler bei der Anzahl oder Reihenfolge der Argumente gemacht haben.
Richtiger Ansatz
Um Masseneinfügungen durchzuführen Nutzen Sie effizient die CopyFrom-Funktion von pgx, die das für solche Vorgänge entwickelte PostgreSQL-Kopierprotokoll verwendet. Mit CopyFrom können Sie Zeilen aus einer Quelle in großen Mengen in eine Tabelle einfügen.
Codebeispiel für die Verwendung von 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) }
Das obige ist der detaillierte Inhalt vonWie führt man mithilfe von pgx effizient Masseneinfügungen in Postgres mit Go durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!