Maison >développement back-end >Golang >Comment puis-je effectuer efficacement des opérations d'insertion en masse dans Postgres à l'aide de pgx et éviter l'erreur « 10 arguments attendus, j'en ai obtenu 1 » ?
Insertion groupée dans Postgres : un guide complet
L'insertion groupée est une opération courante dans la gestion de bases de données, offrant une méthode très efficace pour insérer un un grand nombre d'enregistrements à la fois. Cela peut réduire considérablement le temps de traitement par rapport à l'insertion d'enregistrements individuellement.
Dans l'extrait de code fourni, vous rencontrez un problème lorsque vous tentez d'insérer des données en masse dans la table « clés » à l'aide de pgx, un pilote de base de données PostgreSQL pour Go. . L'erreur « 10 arguments attendus, j'en ai obtenu 1 » suggère que l'instruction SQL en cours d'exécution n'est pas correctement formatée pour le nombre de valeurs transmises.
Pour résoudre ce problème, il est recommandé d'exploiter l'outil intégré Fonction pgx.Conn.CopyFrom, spécialement conçue pour les opérations d'insertion en masse. CopyFrom utilise le protocole de copie PostgreSQL, qui offre des performances supérieures par rapport à la création manuelle d'instructions SQL.
L'implémentation correcte à l'aide de CopyFrom ressemblerait à ce qui suit :
<code class="go">// Define data to be inserted data := []struct { KeyVal string LastVal int }{ {"abc", 10}, {"dns", 11}, {"qwe", 12}, {"dss", 13}, {"xcmk", 14}, } // Establish connection to the database dbUrl := "..." conn, err := pgx.Connect(context.Background(), dbUrl) if err != nil { log.Fatalf("Error connecting to database: %v", err) } defer conn.Close(context.Background()) // Execute bulk insertion using CopyFrom copyCount, err := conn.CopyFrom( pgx.Identifier{"keys"}, []string{"keyval", "lastval"}, pgx.CopyFromRows(data), ) if err != nil { log.Fatalf("Error inserting data: %v", err) } fmt.Printf("Inserted %d rows into the keys table.\n", copyCount)</code>
En utilisant CopyFrom, vous pouvez rationaliser vos opérations d’insertion en masse et améliorez considérablement vos performances. N'oubliez pas de spécifier correctement les noms de colonnes dans la tranche appropriée et de vous assurer que la tranche de données est bien formée pour éviter les erreurs inattendues.
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!