Maison > Article > développement back-end > Comment effectuer efficacement des insertions en masse dans Postgres avec Go en utilisant pgx ?
INSERT en masse dans Postgres dans Go en utilisant pgx : résolu
Dans le code Go donné, vous créez manuellement une instruction INSERT et exécutez en utilisant pgx.Exec. Cependant, cette approche peut s'avérer inefficace et sujette à des erreurs, en particulier pour les insertions groupées.
Identification du problème
Le message d'erreur « 10 arguments attendus, j'en ai obtenu 1 » indique un inadéquation entre le nombre d'arguments fournis et ceux attendus par la base de données. Cette erreur survient parce que vous construisez manuellement l'instruction INSERT et que vous avez peut-être commis une erreur dans le nombre ou la séquence d'arguments.
Approche correcte
Pour effectuer des insertions groupées efficacement, exploitez la fonction CopyFrom de pgx, qui utilise le protocole de copie PostgreSQL conçu pour de telles opérations. CopyFrom vous permet d'insérer en masse des lignes d'une source dans une table.
Exemple de code utilisant 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) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!