首頁  >  文章  >  後端開發  >  如何在 Go 中將行從 STDIN 匯入到 PostgreSQL?

如何在 Go 中將行從 STDIN 匯入到 PostgreSQL?

Linda Hamilton
Linda Hamilton原創
2024-10-24 14:20:53863瀏覽

How to Import Rows to PostgreSQL from STDIN in Go?

從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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn