ホームページ  >  記事  >  バックエンド開発  >  Go で STDIN から PostgreSQL に行をインポートするにはどうすればよいですか?

Go で STDIN から PostgreSQL に行をインポートするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-24 14:20:53740ブラウズ

How to Import Rows to PostgreSQL from STDIN in Go?

STDIN から PostgreSQL への行のインポート

Python では、subprocess モジュールは COPY を使用して STDIN から PostgreSQL にデータを書き込む便利な方法を提供します。指示。ただし、これと同じ機能を 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。