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 サイトの他の関連記事を参照してください。