Saya adalah penulis node-postgres . Pertama, saya minta maaf karena dokumentasi gagal memperjelas opsi yang benar: itu salah saya. Saya akan mencoba memperbaikinya. Saya baru saja menulis Gist untuk menjelaskan hal ini karena percakapan menjadi terlalu panjang untuk Twitter.
Menggunakan pg.connectadalah cara untuk masuk ke lingkungan web.
Server PostgreSQL hanya dapat menangani 1 kueri pada satu waktu per koneksi. Itu berarti jika Anda memiliki 1 global yang new pg.Client()terhubung ke backend Anda, seluruh aplikasi Anda akan mengalami bottlekneck berdasarkan seberapa cepat postgres dapat menanggapi kueri. Ini benar-benar akan berbaris semuanya, mengantri setiap kueri. Ya, ini asinkron dan tidak apa-apa ... tetapi bukankah Anda lebih suka mengalikan throughput Anda dengan 10x? Gunakan pg.connect set the
pg.defaults.poolSizeke sesuatu yang waras (kami lakukan 25-100, belum yakin nomor yang benar).
new pg.Clientadalah untuk saat Anda tahu apa yang Anda lakukan. Bila Anda membutuhkan satu klien berumur panjang karena alasan tertentu atau perlu mengontrol siklus hidup dengan sangat hati-hati. Contoh bagusnya adalah saat menggunakan
LISTEN/NOTIFY. Klien mendengarkan harus ada dan terhubung dan tidak dibagikan sehingga dapat menangani NOTIFYpesan dengan benar . Contoh lain adalah ketika membuka klien 1-off untuk mematikan beberapa hal yang macet atau dalam skrip baris perintah.
Satu hal yang sangat membantu adalah memusatkan semua akses ke database Anda di aplikasi Anda ke satu file. Jangan membuang-buang pg.connecttelepon atau klien baru. Buat file seperti db.jsitu terlihat seperti ini:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
Dengan cara ini Anda dapat mengubah implementasi Anda dari pg.connectmenjadi kumpulan klien khusus atau apa pun dan hanya perlu mengubah berbagai hal di satu tempat.
Lihat modul node-pg-query yang melakukan hal ini.