Maison >développement back-end >Golang >Comment importer efficacement des lignes vers PostgreSQL depuis STDIN ?
L'importation de lignes vers PostgreSQL depuis STDIN peut être une technique utile pour le chargement groupé de données. Dans Go, cela peut être réalisé à l'aide du package github.com/lib/pq.
Le script Python fourni dans la question utilise le module de sous-processus pour appeler psql et spécifier la commande COPY avec --set=ON_ERROR_STOP =false option pour gérer les erreurs pendant le processus d'importation.
Le code Go fourni dans la question écrit initialement les données dans un fichier, puis les importe dans PostgreSQL. Cependant, cette méthode est inefficace et implique la création et la suppression de fichiers temporaires.
Une approche plus efficace consiste à utiliser la fonction CopyIn() du package pq pour importer directement des données depuis STDIN. Voici le code Go modifié :
<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>
En utilisant cette méthode, l'importation d'un million d'enregistrements prend environ 2 secondes en moyenne. C'est beaucoup plus rapide que d'écrire dans un fichier puis de l'importer à partir du disque.
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!