Das Importieren von Zeilen von STDIN nach PostgreSQL kann eine nützliche Technik für das Massenladen von Daten sein. In Go kann dies mit dem Paket github.com/lib/pq erreicht werden.
Das in der Frage bereitgestellte Python-Skript verwendet das Subprocess-Modul, um psql aufzurufen und den COPY-Befehl mit --set=ON_ERROR_STOP anzugeben =false-Option zur Behandlung etwaiger Fehler während des Importvorgangs.
Der in der Frage bereitgestellte Go-Code schreibt die Daten zunächst in eine Datei und importiert sie dann in PostgreSQL. Diese Methode ist jedoch ineffizient und erfordert das Erstellen und Löschen temporärer Dateien.
Ein effizienterer Ansatz besteht darin, die CopyIn()-Funktion des pq-Pakets zu verwenden, um Daten direkt aus STDIN zu importieren. Hier ist der modifizierte Go-Code:
<code class="go">package main import ( "database/sql" "fmt" "log" "github.com/lib/pq" ) func main() { // Open the database connection. db, err := sql.Open("postgres", "dbname=postgres user=postgres password=postgres") if err != nil { log.Fatalf("open: %v", err) } defer db.Close() // Prepare the COPY statement. stmt, err := pq.CopyIn(db, "test", "first_name", "last_name") if err != nil { log.Fatalf("prepare: %v", err) } // Create some sample data. records := [][]string{ {"Rob", "Pike"}, {"Ken", "Thompson"}, {"Robert", "Griesemer"}, } // Iterate over the records and write them to STDIN. for _, r := range records { _, err = fmt.Fprintf(stmt, "%s\t%s\n", r[0], r[1]) if err != nil { log.Fatalf("exec: %v", err) } } // Signal the end of the COPY statement. _, err = stmt.Exec() if err != nil { log.Fatalf("exec: %v", err) } // Close the COPY statement. err = stmt.Close() if err != nil { log.Fatalf("stmt close: %v", err) } // Commit the transaction. if err = db.Commit(); err != nil { log.Fatalf("commit: %v", err) } fmt.Println("Data imported successfully.") }</code>
Mit dieser Methode dauert der Import von 1 Million Datensätzen durchschnittlich etwa 2 Sekunden. Dies ist wesentlich schneller als das Schreiben in eine Datei und das anschließende Importieren von der Festplatte.
Das obige ist der detaillierte Inhalt vonWie importiert man Zeilen effizient von STDIN in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!