Ich bin der Autor von Node-Postgres . Zunächst entschuldige ich mich, dass die Dokumentation nicht die richtige Option klargestellt hat: Das ist meine Schuld. Ich werde versuchen, es zu verbessern. Ich habe gerade einen Gist geschrieben , um dies zu erklären, weil das Gespräch für Twitter zu lang wurde.
Verwenden pg.connect
ist der Weg in eine Webumgebung.
Der PostgreSQL-Server kann jeweils nur eine Abfrage pro Verbindung verarbeiten. Das heißt, wenn Sie 1 Global new pg.Client()
mit Ihrem Backend verbunden haben, wird Ihre gesamte App mit einem Flaschenhals versehen, basierend darauf, wie schnell Postgres auf Anfragen antworten können. Es wird buchstäblich alles in einer Reihe stehen und jede Abfrage in die Warteschlange stellen. Ja, es ist asynchron und das ist in Ordnung ... aber würden Sie Ihren Durchsatz nicht lieber mit dem 10-fachen multiplizieren? Verwenden Sie pg.connect
set the
pg.defaults.poolSize
auf etwas Vernünftiges (wir machen 25-100, noch nicht sicher, welche Nummer richtig ist).
new pg.Client
ist für, wenn Sie wissen, was Sie tun. Wenn Sie aus irgendeinem Grund einen einzigen langlebigen Kunden benötigen oder den Lebenszyklus sehr sorgfältig steuern müssen. Ein gutes Beispiel hierfür ist die Verwendung
LISTEN/NOTIFY
. Der abhörende Client muss vorhanden und verbunden sein und darf nicht gemeinsam genutzt werden, damit er NOTIFY
Nachrichten ordnungsgemäß verarbeiten kann. Ein anderes Beispiel wäre das Öffnen eines einmaligen Clients zum Beenden von hängengebliebenen Dingen oder in Befehlszeilenskripten.
Eine sehr hilfreiche Sache ist es, den gesamten Zugriff auf Ihre Datenbank in Ihrer App in einer Datei zu zentralisieren. Werfen Sie keine pg.connect
Anrufe oder neuen Kunden. Eine solche Datei db.js
sieht ungefähr so aus:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
Auf diese Weise können Sie Ihre Implementierung von pg.connect
einem benutzerdefinierten Pool von Clients oder was auch immer ändern und müssen die Dinge nur an einem Ort ändern.
Schauen Sie sich das node-pg-query-Modul an , das genau dies tut.
Ich bin der Autor von pg-versprechen , das die Verwendung von Node-Postgres über Versprechen vereinfacht .
Es befasst sich mit den Problemen hinsichtlich der richtigen Art und Weise, wie eine Verbindung zur Datenbank hergestellt und von dieser getrennt werden kann. Dabei wird unter anderem der von Node-Postgres implementierte Verbindungspool verwendet , beispielsweise automatisierte Transaktionen.
Eine individuelle Anfrage in pg-versprechen läuft darauf hinaus, was für Ihre Geschäftslogik relevant ist:
Das heißt, Sie müssen sich beim Ausführen von Abfragen nicht mit der Verbindungslogik befassen, da Sie die Verbindung nur einmal global wie folgt einrichten:
Weitere Beispiele finden Sie im Tutorial Lernen durch Beispiel oder auf der Homepage des Projekts .
quelle
pg
diesem wird angegeben durchpg.defaults.ssl = true;
. Wie machst du das inpg-promise
?pgp.pg.defaults.ssl = true;
Pool ist der richtige Weg. So etwas
es kann verwendet werden als
db.query('<BEGIN,COMMIT,ROLLBACK,your query,anything')
quelle
Es ist besser, einen pg-Pool global zu erstellen. Verwenden Sie den Client jedes Mal, wenn Sie eine Datenbankoperation ausführen müssen, und geben Sie ihn dann wieder für den Pool frei. Sobald alle Datenbankoperationen abgeschlossen sind, beenden Sie den Pool mit
pool.end()
Beispielcode -
Weitere Informationen finden Sie in meinem Blog-Beitrag - Quelle
quelle
Wie Sie der Dokumentation entnehmen können, sind beide Optionen gültig. Wählen Sie also die gewünschte Option. Als Sie würde ich mit der zweiten Wahl gehen.
quelle
Ich war an einem sehr einfachen Handler interessiert, also habe ich meinen eigenen gemacht, ohne ihn zu kompliziert zu machen. Ich mache mir keine Illusionen darüber, dass es super einfach ist, aber es könnte einigen Leuten helfen, anzufangen. Grundsätzlich stellt es eine Verbindung her, führt Abfragen aus und behandelt Fehler für Sie.
Dann würden Sie es verwenden, indem Sie es so nennen:
quelle
node-postgres
Seite macht es besser.Hier ist, wie ich es mache, eine Art "all der oben genannten Ansatz"
quelle