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.