Maison  >  Article  >  interface Web  >  Comment puis-je effectuer efficacement des insertions multi-lignes dans une base de données PostgreSQL à l'aide de pg-promise ?

Comment puis-je effectuer efficacement des insertions multi-lignes dans une base de données PostgreSQL à l'aide de pg-promise ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 14:03:03195parcourir

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

Insérer plusieurs lignes avec pg-promise

L'insertion de plusieurs lignes dans une table de base de données avec une seule requête peut améliorer considérablement les performances, en particulier lorsque traiter de grands ensembles de données. Pg-promise, un puissant générateur de requêtes SQL et une bibliothèque d'exécution, fournit un moyen pratique et efficace d'effectuer des insertions multi-lignes.

Insertion multi-lignes avec assistants

Pour insérer plusieurs lignes avec pg-promise, vous pouvez utiliser l'espace de noms helpers. Cet espace de noms fournit un ensemble de fonctions utilitaires qui facilitent la construction de requêtes SQL paramétrables.

<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>

La classe ColumnSet définit les colonnes à insérer, tandis que la fonction d'insertion prend les valeurs de données à insérer et génère la requête SQL. Cette approche est très performante et permet à la fois des insertions sur une seule ligne et sur plusieurs lignes.

Protection contre les injections SQL

En ce qui concerne la question secondaire de la protection contre les injections SQL, il est Il est essentiel de comprendre que l’utilisation d’espaces réservés (1 $, 2 $, etc.) ne garantit pas en soi la protection. Il est essentiel de combiner des espaces réservés avec une validation et une désinfection des entrées appropriées pour empêcher l'exécution de commandes SQL malveillantes. Pg-promise utilise cette approche par défaut, offrant un moyen sécurisé d'insérer des données dans votre base de données.

Considérations et extras supplémentaires

  • Renvoi des identifiants : Pour récupérer les ID des enregistrements nouvellement insérés, ajoutez RETURNING id à votre requête et exécutez-la avec la méthode map pour convertir le résultat en un tableau d'entiers.
  • Importations de données énormes : Pour importer des ensembles de données exceptionnellement volumineux, envisagez d'utiliser la fonctionnalité d'importation de données fournie par pg-promise.
  • Optimisation pour la vitesse : La génération de requêtes peut être enveloppée dans une fonction pour garantir qu'elle est effectué une seule fois, améliorant encore la vitesse d'exécution.

En conclusion, l'espace de noms des assistants de pg-promise facilite l'exécution d'insertions sur plusieurs lignes, protégeant ainsi contre l'injection SQL tout en optimisant les performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn