Maison > développement back-end > Golang > Comment puis-je insérer efficacement des données en masse à partir d'un fichier CSV dans PostgreSQL à l'aide de Go sans boucle for ?

Comment puis-je insérer efficacement des données en masse à partir d'un fichier CSV dans PostgreSQL à l'aide de Go sans boucle for ?

Patricia Arquette
Libérer: 2024-10-29 13:09:03
original
358 Les gens l'ont consulté

How can I efficiently bulk insert data from a CSV file into PostgreSQL using Go without a for loop?

Insertion groupée depuis CSV dans PostgreSQL à l'aide de Go sans boucle For

L'insertion d'un grand volume de données à partir d'un fichier CSV dans une base de données PostgreSQL peut prendre beaucoup de temps lors de l'utilisation d'une boucle for. Une approche plus efficace consiste à utiliser la bibliothèque pgx pour effectuer une opération de copie en masse.

Utilisation de pgx pour l'insertion en masse

Pour y parvenir, vous pouvez suivre ces étapes :

  1. Importez la bibliothèque pgx et établissez une connexion à la base de données.
  2. Ouvrez le fichier CSV et préparez un lecteur.
  3. Initialisez un objet CopyFrom à l'aide de la méthode CopyFrom du pgx.Conn().
  4. Passez le lecteur de fichier CSV comme source de données à l'objet CopyFrom.
  5. Spécifiez le nom de la table de destination au format COPY destination_table FROM STDIN (FORMAT csv).
  6. Exécutez l'objet CopyFrom pour effectuer l'insertion en masse.

Exemple de code

Le code Go suivant montre comment insérer en masse des données à partir de un fichier CSV dans une base de données PostgreSQL à l'aide de pgx :

<code class="go">import (
    "context"
    "fmt"
    "os"

    "github.com/jackc/pgx/v5"
)

func main() {
    filename := "foo.csv"
    dbconn, err := pgx.Connect(context.Background(), os.Getenv("DATABASE_URL"))
    if err != nil {
        panic(err)
    }
    defer dbconn.Release()
    f, err := os.Open(filename)
    if err != nil {
        panic(err)
    }
    defer func() { _ = f.Close() }()
    res, err := dbconn.Conn().PgConn().CopyFrom(context.Background(), f, "COPY csv_test FROM STDIN (FORMAT csv)")
    if err != nil {
        panic(err)
    }
    fmt.Print(res.RowsAffected())
}</code>
Copier après la connexion

En utilisant cette approche, vous pouvez efficacement insérer en masse des données à partir de gros fichiers CSV sans la surcharge d'une boucle for. Cette méthode est particulièrement utile pour gérer de grands ensembles de données et garantir des performances de chargement de données plus rapides.

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