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 » ?

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 » ?

Susan Sarandon
Libérer: 2024-10-31 10:10:29
original
1009 Les gens l'ont consulté

How can I efficiently perform bulk insertion operations in Postgres using pgx and avoid the

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal