Maison  >  Article  >  développement back-end  >  Comment importer des lignes vers PostgreSQL depuis STDIN dans Go ?

Comment importer des lignes vers PostgreSQL depuis STDIN dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-24 14:20:53865parcourir

How to Import Rows to PostgreSQL from STDIN in Go?

Importation de lignes vers PostgreSQL depuis STDIN

En Python, le module de sous-processus fournit un moyen pratique d'écrire des données dans PostgreSQL depuis STDIN à l'aide de COPY commande. Cependant, obtenir cette même fonctionnalité dans Go implique une approche différente.

La documentation officielle du package github.com/lib/pq propose un exemple de la façon d'importer des enregistrements directement depuis STDIN à l'aide de la fonction CopyIn. Voici une version adaptée du code fourni :

<code class="go">package main

import (
    "database/sql"
    "fmt"
    "log"

    "github.com/lib/pq"
)

func main() {
    records := [][]string{
        {"Rob", "Pike"},
        {"Ken", "Thompson"},
        {"Robert", "Griesemer"},
    }

    db, err := sql.Open("postgres", "dbname=postgres user=postgres password=postgres")
    if err != nil {
        log.Fatalf("open: %v", err)
    }
    if err = db.Ping(); err != nil {
        log.Fatalf("open ping: %v", err)
    }
    defer db.Close()

    txn, err := db.Begin()
    if err != nil {
        log.Fatalf("begin: %v", err)
    }

    stmt, err := txn.Prepare(pq.CopyIn("test", "first_name", "last_name"))
    if err != nil {
        log.Fatalf("prepare: %v", err)
    }

    for _, r := range records {
        _, err = stmt.Exec(r[0], r[1])
        if err != nil {
            log.Fatalf("exec: %v", err)
        }
    }

    _, err = stmt.Exec()
    if err != nil {
        log.Fatalf("exec: %v", err)
    }

    err = stmt.Close()
    if err != nil {
        log.Fatalf("stmt close: %v", err)
    }

    err = txn.Commit()
    if err != nil {
        log.Fatalf("commit: %v", err)
    }

    log.Println("Records successfully imported")
}</code>

Ce code révisé utilise une transaction pour garantir les propriétés d'atomicité, de cohérence, d'isolation et de durabilité (ACID) pendant le processus d'importation. La fonction CopyIn vous permet de spécifier le nom de la table cible et les colonnes dans lesquelles les données seront insérées.

Les exemples de données fournis sont ensuite insérés dans la table "test" à l'aide d'instructions préparées. Les instructions préparées améliorent les performances en précompilant la requête SQL, réduisant ainsi la surcharge associée à l'analyse et à la planification.

Une fois tous les enregistrements insérés, la transaction est validée et les données sont stockées de manière permanente dans la base de 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