ホームページ  >  記事  >  ウェブフロントエンド  >  pg-promise を使用して PostgreSQL データベースで複数行の挿入を効率的に実行するにはどうすればよいですか?

pg-promise を使用して PostgreSQL データベースで複数行の挿入を効率的に実行するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 14:03:03195ブラウズ

How can I efficiently perform multi-row inserts in a PostgreSQL database using pg-promise?

pg-promise による複数行挿入

単一のクエリでデータベース テーブルに複数の行を挿入すると、特に次の場合にパフォーマンスが大幅に向上します。大規模なデータセットを扱う。強力な SQL クエリ ビルダーおよび実行ライブラリである Pg-promise は、複数行の挿入を実行する便利で効率的な方法を提供します。

ヘルパーを使用した複数行の挿入

pg-promise で複数の行を挿入するには、ヘルパー名前空間を使用できます。この名前空間は、パラメータ化可能な SQL クエリを簡単に構築できる一連のユーティリティ関数を提供します。

<code class="javascript">const pgp = require('pg-promise')({
  capSQL: true // capitalize all generated SQL
});
const db = pgp(/*connection*/);
const {ColumnSet, insert} = pgp.helpers;

// our set of columns, to be created only once (statically), and then reused,
// to let it cache up its formatting templates for high performance:
const cs = new ColumnSet(['col_a', 'col_b'], {table: 'tmp'});
    
// data input values:
const values = [{col_a: 'a1', col_b: 'b1'}, {col_a: 'a2', col_b: 'b2'}];
    
// generating a multi-row insert query:
const query = insert(values, cs);
//=> INSERT INTO &quot;tmp&quot;(&quot;col_a&quot;,&quot;col_b&quot;) VALUES('a1','b1'),('a2','b2')
    
// executing the query:
await db.none(query);</code>

ColumnSet クラスは挿入する列を定義し、挿入関数は挿入するデータ値を取得して生成します。 SQL クエリ。このアプローチはパフォーマンスが高く、単一行と複数行の両方の挿入が可能です。

SQL インジェクション保護

SQL インジェクション保護に関する補足的な質問については、次のとおりです。プレースホルダー ($1、$2 など) の使用だけでは保護が保証されないことを理解することが重要です。悪意のある SQL コマンドの実行を防ぐには、プレースホルダーと適切な入力検証およびサニタイズを組み合わせることが不可欠です。 Pg-promise はデフォルトでこのアプローチを採用し、データベースにデータを安全に挿入する方法を提供します。

追加の考慮事項と補足

  • ID の返却: 新しく挿入されたレコードの ID を取得するには、RETURNING ID をクエリに追加し、map メソッドで実行して結果を整数の配列に変換します。
  • 巨大なデータのインポート: 非常に大規模なデータセットをインポートする場合は、pg-promise が提供するデータ インポート機能の使用を検討してください。
  • 速度の最適化: クエリ生成を関数にラップして、クエリ生成を関数にラップすることができます。 1 回だけ実行されるため、実行速度がさらに向上します。

結論として、pg-promise のヘルパー名前空間を使用すると、複数行の挿入を簡単に実行でき、パフォーマンスを最適化しながら SQL インジェクションを保護できます。

以上がpg-promise を使用して PostgreSQL データベースで複数行の挿入を効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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