Go で pgx を使用して Postgres にデータを一括挿入する方法: 包括的なガイド

Susan Sarandon
リリース: 2024-10-31 03:32:31
オリジナル
663 人が閲覧しました

How to Bulk Insert Data into Postgres Using pgx in Go: A Comprehensive Guide

Go で pgx を使用した Postgres への一括挿入: 包括的なソリューション

データベースへの一括挿入を試行する場合、SQL ステートメントを手動で作成すると、エラーやパフォーマンスのボトルネックが発生する可能性があります。 pgx の pgx.Conn.CopyFrom 機能を利用すると、プロセスを自動化する効率的なソリューションが提供されます。

手動 SQL 作成の問題

提供されたコードでは、SQL ステートメントは文字列を連結することによって構築されます。ドルパラメータ ($ 記号) の数が conn.Exec 関数に渡される引数の数と一致しない場合、エラーが発生する可能性があります。さらに、大規模な入力の文字列連結は効率が悪く、メモリの問題を引き起こす可能性があります。

pgx の CopyFrom メソッドの利用

pgx の CopyFrom メソッドは、PostgreSQL コピー プロトコルを利用することで一括データの挿入を簡素化します。 3 つの引数を取ります:

  1. tableName: 挿入のターゲット テーブルの名前。
  2. columnNames: 挿入される列の名前を指定する文字列のスライス。
  3. rowSrc: 挿入するデータを生成する CopyFromSource オブジェクト。

CopyFromSource インターフェイスを使用すると、データ ソースを柔軟に指定できます。これは、インターフェイス値のスライスのスライス (提供された例のように)、CSV データを含む strings.Reader、またはカスタム実装を使用して実装できます。

コード例

以下はCopyFrom:

<code class="go">rows := [][]interface{}{
    {"abc", 10},
    {"dns", 11},
    {"qwe", 12},
    {"dss", 13},
    {"xcmk", 14},
}

_, err := conn.CopyFrom(
    pgx.Identifier{"keys"},
    []string{"keyval", "lastval"},
    pgx.CopyFromRows(rows),
)</code>
ログイン後にコピー

の使用を示す改訂されたコード スニペット。このコードは行を「keys」テーブルに効率的に一括挿入し、手動で SQL を作成する場合と比較してパフォーマンスを大幅に向上させ、エラーの可能性を減らします。

以上がGo で pgx を使用して Postgres にデータを一括挿入する方法: 包括的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート