從STDIN 導入行到PostgreSQL
在Python 中,subprocess 模組提供了一種使用COPY 將資料從STDIN 寫入Postgregre 的Postgre便捷方法命令。然而,在 Go 中實現相同的功能需要不同的方法。
github.com/lib/pq 套件的官方文件提供如何使用 CopyIn 函數直接從 STDIN 匯入記錄的範例。以下是所提供程式碼的改編版本:
<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>
此修訂後的程式碼使用交易來確保導入過程中的原子性、一致性、隔離性和持久性 (ACID) 屬性。 CopyIn 函數可讓您指定目標表名稱以及將插入資料的列。
然後使用準備好的語句將提供的範例資料插入到「測試」表中。準備好的語句透過預先編譯 SQL 查詢來提高效能,減少與解析和規劃相關的開銷。
插入所有記錄後,交易將被提交,資料將永久儲存在資料庫中。
以上是如何在 Go 中將行從 STDIN 匯入到 PostgreSQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!