Jestem autorem node-postgres . Po pierwsze, przepraszam, że dokumentacja nie wyjaśniła właściwej opcji: to moja wina. Postaram się to poprawić. Napisałem teraz streszczenie, aby to wyjaśnić, ponieważ rozmowa wydłużyła się zbyt długo dla Twittera.
Używanie pg.connect
to sposób na poruszanie się w środowisku sieciowym.
Serwer PostgreSQL może obsłużyć tylko 1 zapytanie na raz na połączenie. Oznacza to, że jeśli masz 1 new pg.Client()
połączenie globalne z backendem, cała aplikacja jest ograniczona w zależności od tego, jak szybko postgres może odpowiadać na zapytania. Dosłownie wyrówna wszystko, ustawiając w kolejce każde zapytanie. Tak, jest asynchroniczny, więc w porządku ... ale czy nie wolałbyś raczej pomnożyć przepustowości 10x? Użyj pg.connect
set the
pg.defaults.poolSize
na coś rozsądnego (robimy 25-100, nie jesteśmy jeszcze pewni właściwej liczby).
new pg.Client
jest przeznaczony dla osób, które wiesz, co robisz. Gdy z jakiegoś powodu potrzebujesz jednego, długowiecznego klienta lub potrzebujesz bardzo uważnej kontroli cyklu życia. Dobrym tego przykładem jest użycie
LISTEN/NOTIFY
. Klient nasłuchujący musi być w pobliżu i być połączony i nie udostępniony, aby mógł prawidłowo obsługiwać NOTIFY
wiadomości. Innym przykładem może być otwarcie klienta jednorazowego, aby zabić zawieszone rzeczy lub w skryptach wiersza poleceń.
Bardzo pomocną rzeczą jest scentralizowanie całego dostępu do bazy danych w aplikacji do jednego pliku. Nie zaśmiecaj pg.connect
telefonów ani nowych klientów przez cały czas. Miej taki plik, db.js
który wygląda mniej więcej tak:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
W ten sposób możesz zmienić swoją implementację z pg.connect
niestandardowej puli klientów lub cokolwiek innego i zmienić tylko rzeczy w jednym miejscu.
Przyjrzyj się modułowi node-pg-query , który właśnie to robi.
Jestem autorem pg-promise , które upraszcza korzystanie z node-postgres poprzez obietnice.
Porusza kwestie prawidłowego sposobu łączenia się z bazą danych i odłączania się od niej, wykorzystując pulę połączeń realizowaną przez node-postgres , m.in. zautomatyzowane transakcje.
Indywidualne żądanie w pg-promise sprowadza się do tego, co jest istotne dla Twojej logiki biznesowej:
tj. nie musisz zajmować się logiką połączeń podczas wykonywania zapytań, ponieważ konfigurujesz połączenie tylko raz, globalnie, na przykład:
Więcej przykładów można znaleźć w samouczku „ Naucz się przez przykłady” lub na stronie głównej projektu .
źródło
pg
tym jest określone przezpg.defaults.ssl = true;
. Jak to robiszpg-promise
?pgp.pg.defaults.ssl = true;
Basen jest teraz właściwą drogą. Coś takiego
może być używany jako
db.query('<BEGIN,COMMIT,ROLLBACK,your query,anything')
źródło
Lepiej jest utworzyć pulę pg globalnie i za każdym razem, gdy musisz wykonać operację db, użyj klienta, a następnie zwolnij go z powrotem do puli. Po zakończeniu wszystkich operacji dotyczących bazy danych zakończ pulę za pomocą
pool.end()
Przykładowy kod -
Więcej szczegółów można znaleźć w moim poście na blogu - Źródło
źródło
Jak widać z dokumentacji, obie opcje są prawidłowe, więc wybierz tę, którą wolisz. Tak jak ty, wybrałbym drugi wybór.
źródło
Byłem zainteresowany bardzo prostym programem obsługi, więc stworzyłem własny, nie komplikując go zbytnio. Nie mam złudzeń, że jest super prosty, ale może pomóc niektórym zacząć. Zasadniczo łączy, uruchamia zapytania i obsługuje błędy.
Wtedy użyłbyś, nazywając to w ten sposób:
źródło
node-postgres
stronie działa lepiej niż ten.Oto jak to robię, coś w rodzaju „całego powyższego podejścia”
źródło