首頁  >  文章  >  web前端  >  如何使用 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 進行多行插入

使用單一查詢將多行插入到資料庫表中可以顯著提高效能,尤其是在處理大型資料集。 Pg-promise 是一個強大的 SQL 查詢建構器和執行器函式庫,提供了一種方便且有效率的方法來執行多行插入。

使用助手進行多行插入

要使用 pg-promise 插入多行,您可以使用 helpers 命名空間。此命名空間提供了一組實用函數,可以輕鬆建構可參數化的 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 類別定義要插入的列,而 insert 函數則取得要插入的資料值並產生SQL 查詢。這種方法性能很高,並且允許單行和多行插入。

SQL 注入保護

關於SQL 注入保護的附帶問題,它是重要的是要理解使用佔位符($1、$2 等)本身並不能保證保護。必須將佔位符與適當的輸入驗證和清理相結合,以防止執行惡意 SQL 命令。 Pg-promise 預設採用這種方法,提供了一種將資料插入資料庫的安全方法。

其他注意事項和額外內容

  • 回傳ID : 若要擷取新插入記錄的ID,請將RETURNING id 附加到查詢中,並使用map 方法執行它,以將結果轉換為整數陣列。
  • 大量資料匯入: 對於匯入特別大的資料集,請考慮使用 pg-promise 提供的資料匯入功能。
  • 最佳化速度: 查詢產生可以包裝到一個函數中以確保它是僅執行一次,進一步提高執行速度。

總之,pg-promise 的 helpers 命名空間可以輕鬆執行多行插入,防止 SQL 注入,同時最佳化效能。

以上是如何使用 pg-promise 在 PostgreSQL 資料庫中有效地執行多行插入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn