Heim  >  Artikel  >  Backend-Entwicklung  >  Wie importiere ich Zeilen von STDIN in Go in PostgreSQL?

Wie importiere ich Zeilen von STDIN in Go in PostgreSQL?

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 14:20:53740Durchsuche

How to Import Rows to PostgreSQL from STDIN in Go?

Zeilen aus STDIN in PostgreSQL importieren

In Python bietet das Unterprozessmodul eine praktische Möglichkeit, Daten mithilfe von COPY aus STDIN in PostgreSQL zu schreiben Befehl. Um dieselbe Funktionalität in Go zu erreichen, ist jedoch ein anderer Ansatz erforderlich.

Die offizielle Dokumentation für das Paket github.com/lib/pq bietet ein Beispiel dafür, wie Datensätze mithilfe der CopyIn-Funktion direkt aus STDIN importiert werden. Hier ist eine angepasste Version des bereitgestellten Codes:

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

Dieser überarbeitete Code verwendet eine Transaktion, um die Eigenschaften Atomizität, Konsistenz, Isolation und Haltbarkeit (ACID) während des Importvorgangs sicherzustellen. Mit der CopyIn-Funktion können Sie den Namen der Zieltabelle und die Spalten angeben, in die die Daten eingefügt werden.

Die bereitgestellten Beispieldaten werden dann mithilfe vorbereiteter Anweisungen in die „Test“-Tabelle eingefügt. Vorbereitete Anweisungen verbessern die Leistung, indem sie die SQL-Abfrage vorkompilieren und so den mit dem Parsen und Planen verbundenen Aufwand reduzieren.

Sobald alle Datensätze eingefügt sind, wird die Transaktion festgeschrieben und die Daten werden dauerhaft in der Datenbank gespeichert.

Das obige ist der detaillierte Inhalt vonWie importiere ich Zeilen von STDIN in Go in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn