Je suis l'auteur de node-postgres . Tout d'abord, je m'excuse que la documentation n'a pas réussi à préciser la bonne option: c'est ma faute. Je vais essayer de l'améliorer. J'ai écrit un Gist tout à l'heure pour expliquer cela parce que la conversation est devenue trop longue pour Twitter.
L'utilisation pg.connect
est la voie à suivre dans un environnement Web.
Le serveur PostgreSQL ne peut gérer qu'une seule requête à la fois par connexion. Cela signifie que si vous avez 1 global new pg.Client()
connecté à votre backend, votre application entière est contrôlée en fonction de la vitesse à laquelle postgres peut répondre aux requêtes. Il alignera littéralement tout, mettant chaque requête en file d'attente. Oui, c'est asynchrone et donc ça va ... mais ne voudriez-vous pas plutôt multiplier votre débit par 10x? Utilisez pg.connect
régler le
pg.defaults.poolSize
sur quelque chose de sain (nous faisons 25-100, pas encore sûr du bon nombre).
new pg.Client
est pour quand vous savez ce que vous faites. Lorsque vous avez besoin d'un seul client à long terme pour une raison quelconque ou que vous devez contrôler très soigneusement le cycle de vie. Un bon exemple de ceci est lors de l'utilisation
LISTEN/NOTIFY
. Le client qui écoute doit être présent et connecté et non partagé pour pouvoir gérer correctement les NOTIFY
messages. Un autre exemple serait lors de l'ouverture d'un client unique pour tuer des éléments bloqués ou dans des scripts de ligne de commande.
Une chose très utile est de centraliser tous les accès à votre base de données dans votre application dans un seul fichier. Ne gaspillez pas les pg.connect
appels ou les nouveaux clients partout. Avoir un fichier comme db.js
celui-ci ressemble à ceci:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
De cette façon, vous pouvez changer votre implémentation pg.connect
en un pool personnalisé de clients ou autre et ne devez changer les choses qu'en un seul endroit.
Jetez un œil au module node-pg-query qui fait exactement cela.
Je suis l'auteur de pg-promise , qui simplifie l'utilisation de node-postgres via des promesses.
Il résout les problèmes liés à la bonne manière de se connecter et de se déconnecter de la base de données, en utilisant le pool de connexions implémenté par node-postgres , entre autres, comme les transactions automatisées.
Une demande individuelle dans pg-promise se résume à ce qui est pertinent pour votre logique métier:
c'est-à-dire que vous n'avez pas besoin de gérer la logique de connexion lors de l'exécution de requêtes, car vous ne configurez la connexion qu'une seule fois, globalement, comme ceci:
Vous pouvez trouver de nombreux autres exemples dans le didacticiel Apprendre par l'exemple ou sur la page d'accueil du projet .
la source
pg
ceci est spécifié parpg.defaults.ssl = true;
. Comment faites-vous celapg-promise
?pgp.pg.defaults.ssl = true;
La piscine est la voie à suivre maintenant.
il peut être utilisé comme
db.query('<BEGIN,COMMIT,ROLLBACK,your query,anything')
la source
Il est préférable de créer un pool pg globalement et chaque fois que vous devez effectuer une opération de base de données, utilisez le client, puis relâchez-le dans le pool. Une fois toutes les opérations de base de données terminées, mettez fin au pool
pool.end()
Exemple de code -
Pour plus de détails, vous pouvez vous référer à mon article de blog - Source
la source
Comme vous pouvez le voir dans la documentation, les deux options sont valides, alors choisissez celle que vous préférez. Comme vous, j'irais avec le deuxième choix.
la source
J'étais intéressé par un gestionnaire très simple pour cela, alors j'ai fait le mien sans le rendre trop compliqué. Je n'ai aucune illusion sur le fait que c'est super basique, mais cela pourrait aider certaines personnes à démarrer. Fondamentalement, il se connecte, exécute des requêtes et gère les erreurs pour vous.
Ensuite, vous utiliseriez en l'appelant de cette façon:
la source
node-postgres
page fait mieux que cela.Voici comment je le fais, une sorte de "tout ce qui précède"
la source