ホームページ  >  記事  >  バックエンド開発  >  for ループを使用せずに Go を使用して CSV ファイルから PostgreSQL にデータを効率的に一括挿入するにはどうすればよいですか?

for ループを使用せずに Go を使用して CSV ファイルから PostgreSQL にデータを効率的に一括挿入するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-29 13:09:03309ブラウズ

How can I efficiently bulk insert data from a CSV file into PostgreSQL using Go without a for loop?

For ループを使用しない Go を使用した CSV から PostgreSQL への一括挿入

CSV ファイルから PostgreSQL データベースに大量のデータを挿入すると、次のことが可能になります。 for ループを使用すると時間がかかります。より効率的なアプローチは、pgx ライブラリを利用して一括コピー操作を実行することです。

一括挿入に pgx を使用する

これを実現するには、次の手順に従います。

  1. pgx ライブラリをインポートし、データベース接続を確立します。
  2. CSV ファイルを開き、リーダーを準備します。
  3. pgx.Conn().
  4. データのソースとして CSV ファイル リーダーを CopyFrom オブジェクトに渡します。
  5. 宛先テーブル名を COPY destination_table FROM STDIN (FORMAT csv) の形式で指定します。
  6. CopyFrom オブジェクトを実行して一括挿入を実行します。

コード例

次の Go コードは、データを一括挿入する方法を示しています。 pgx:

<code class="go">import (
    "context"
    "fmt"
    "os"

    "github.com/jackc/pgx/v5"
)

func main() {
    filename := "foo.csv"
    dbconn, err := pgx.Connect(context.Background(), os.Getenv("DATABASE_URL"))
    if err != nil {
        panic(err)
    }
    defer dbconn.Release()
    f, err := os.Open(filename)
    if err != nil {
        panic(err)
    }
    defer func() { _ = f.Close() }()
    res, err := dbconn.Conn().PgConn().CopyFrom(context.Background(), f, "COPY csv_test FROM STDIN (FORMAT csv)")
    if err != nil {
        panic(err)
    }
    fmt.Print(res.RowsAffected())
}</code>

を使用して CSV ファイルを PostgreSQL データベースに保存します。このアプローチを使用すると、for ループのオーバーヘッドを発生させずに、大きな CSV ファイルからデータを効率的に一括挿入できます。この方法は、大規模なデータ セットを処理し、より高速なデータ読み込みパフォーマンスを確保する場合に特に役立ちます。

以上がfor ループを使用せずに Go を使用して CSV ファイルから PostgreSQL にデータを効率的に一括挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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