Maison >développement back-end >Golang >Comment insérer efficacement des données CSV dans PostgreSQL à l'aide de Go Without For Loops ?

Comment insérer efficacement des données CSV dans PostgreSQL à l'aide de Go Without For Loops ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 06:52:31328parcourir

How to Efficiently Bulk Insert CSV Data into PostgreSQL Using Go Without For Loops?

Insertion efficace de données en masse de CSV vers PostgreSQL à l'aide de Go (sans boucles For)

Dans Go, la commande COPY de Postgres fournit un moyen efficace pour insérer en masse des données d'un fichier CSV dans une base de données PostgreSQL. Voici comment y parvenir sans utiliser de boucles for :

Étape 1 : Établir une connexion à la base de données

Établissez une connexion à la base de données à l'aide de la bibliothèque pgx. Ceci est essentiel pour accéder à la base de données et exécuter les commandes.

Étape 2 : Ouvrez le fichier CSV

Ouvrez le fichier CSV contenant les données à insérer. Assurez-vous que le fichier est accessible par votre application.

Étape 3 : Exécutez la commande COPY

Exécutez la méthode PgConn().CopyFrom() pour lancer le transfert de données depuis le fichier CSV dans la table de la base de données. Voici un exemple :

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

    "github.com/jackc/pgx/v4/pgxpool"
)

const query = "COPY csv_test FROM STDIN (FORMAT csv)"

func main() {
    dbpool, err := pgxpool.Connect(context.Background(), os.Getenv("DATABASE_URL"))
    if err != nil {
        panic(err)
    }
    defer dbpool.Close()

    f, err := os.Open("foo.csv")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    res, err := dbpool.Conn().PgConn().CopyFrom(context.Background(), f, query)
    if err != nil {
        panic(err)
    }
    fmt.Print(res.RowsAffected())
}</code>

Décomposition du code :

  • La variable de requête définit la commande COPY qui sera exécutée.
  • La fonction main() établit une connexion à la base de données à l'aide de dbpool, ouvre le fichier CSV et exécute la commande COPY étendue à l'aide de PgConn().CopyFrom().
  • La variable res stocke le résultat de l'exécution , y compris le nombre de lignes concernées.

Avantages :

  • Efficacité : La commande COPY est très efficace pour le traitement en masse insertion de données, évitant ainsi une surcharge inutile par rapport aux approches basées sur des boucles.
  • Concurrence : pgxpool permet des connexions simultanées, permettant des opérations parallèles pour un traitement des données plus rapide.
  • Sécurité de type : pgx assure la sécurité de type lors de l'exécution de la commande COPY, garantissant ainsi l'intégrité des données.

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!

Déclaration:
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