Heim  >  Artikel  >  Web-Frontend  >  Wie kann ich mit pg-promise effizient mehrzeilige Einfügungen in einer PostgreSQL-Datenbank durchführen?

Wie kann ich mit pg-promise effizient mehrzeilige Einfügungen in einer PostgreSQL-Datenbank durchführen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 14:03:03195Durchsuche

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

Einfügen mehrerer Zeilen mit pg-promise

Das Einfügen mehrerer Zeilen in eine Datenbanktabelle mit einer einzigen Abfrage kann die Leistung erheblich verbessern, insbesondere wenn Umgang mit großen Datensätzen. Pg-promise, eine leistungsstarke SQL-Abfrage-Builder- und Executor-Bibliothek, bietet eine bequeme und effiziente Möglichkeit, mehrzeilige Einfügungen durchzuführen.

Einfügung mehrerer Zeilen mit Hilfsprogrammen

Um mehrere Zeilen mit pg-promise einzufügen, können Sie den Helpers-Namespace verwenden. Dieser Namespace bietet eine Reihe von Hilfsfunktionen, die das Erstellen parametrisierbarer SQL-Abfragen erleichtern.

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

Die ColumnSet-Klasse definiert die einzufügenden Spalten, während die Einfügefunktion die einzufügenden Datenwerte übernimmt und generiert die SQL-Abfrage. Dieser Ansatz ist hochleistungsfähig und ermöglicht sowohl einzeilige als auch mehrzeilige Einfügungen.

SQL-Injection-Schutz

Was die Nebenfrage des SQL-Injection-Schutzes betrifft, ist dies der Fall Es ist wichtig zu verstehen, dass die Verwendung von Platzhaltern ($1, $2 usw.) allein keinen Schutz garantiert. Es ist wichtig, Platzhalter mit einer ordnungsgemäßen Eingabevalidierung und -bereinigung zu kombinieren, um die Ausführung bösartiger SQL-Befehle zu verhindern. Pg-promise verwendet diesen Ansatz standardmäßig und bietet eine sichere Möglichkeit, Daten in Ihre Datenbank einzufügen.

Zusätzliche Überlegungen und Extras

  • Rückgabe von IDs :Um die IDs neu eingefügter Datensätze abzurufen, hängen Sie RETURNING id an Ihre Abfrage an und führen Sie sie mit der Map-Methode aus, um das Ergebnis in ein Array von Ganzzahlen umzuwandeln.
  • Riesige Datenimporte:Zum Importieren außergewöhnlich großer Datensätze sollten Sie die von pg-promise bereitgestellte Datenimportfunktion verwenden.
  • Optimierung für Geschwindigkeit: Die Abfragegenerierung kann in eine Funktion eingebunden werden, um sicherzustellen, dass dies der Fall ist Wird nur einmal ausgeführt, was die Ausführungsgeschwindigkeit weiter verbessert.

Zusammenfassend lässt sich sagen, dass der Helfer-Namespace von pg-promise die Durchführung von mehrzeiligen Einfügungen vereinfacht und so vor SQL-Injection schützt und gleichzeitig die Leistung optimiert.

Das obige ist der detaillierte Inhalt vonWie kann ich mit pg-promise effizient mehrzeilige Einfügungen in einer PostgreSQL-Datenbank durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn