PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

wann die Verbindung getrennt und wann ein pg-Client oder -Pool beendet werden soll

Zunächst aus der pg-Dokumentation *:

const { Pool } = require('pg')

const pool = new Pool()

// the pool with emit an error on behalf of any idle clients
// it contains if a backend error or network partition happens
pool.on('error', (err, client) => {
  console.error('Unexpected error on idle client', err) // your callback here
  process.exit(-1)
})

// promise - checkout a client
pool.connect()
  .then(client => {
    return client.query('SELECT * FROM users WHERE id = $1', [1]) // your query string here
      .then(res => {
        client.release()
        console.log(res.rows[0]) // your callback here
      })
      .catch(e => {
        client.release()
        console.log(err.stack) // your callback here
      })
  })

Dieser Code/dieses Konstrukt ist ausreichend /made, um Ihren Pool zum Laufen zu bringen, indem Sie Ihr Ding hier bereitstellen Dinge. Wenn Sie Ihre Anwendung beenden, wird die Verbindung normal hängen, da der Pool gut erstellt wurde, genau nicht zum Hängen, auch wenn es eine manuelle Möglichkeit zum Hängen bietet, siehe letzter Abschnitt des Artikel .Sehen Sie sich auch den vorherigen roten Abschnitt an, in dem es heißt:"Sie müssen den Client immer zurückgeben...", um zu akzeptieren

  • das obligatorische client.release() Anleitung
  • vor dem Zugriff auf das Argument.
  • Sie Scope/Closure-Client innerhalb Ihrer Callbacks.

Dann , aus der pg.client-Dokumentation *:

Klartext-Abfrage mit Versprechen

const { Client } = require('pg').Client
const client = new Client()
client.connect()
client.query('SELECT NOW()') // your query string here
  .then(result => console.log(result)) // your callback here
  .catch(e => console.error(e.stack)) // your callback here
  .then(() => client.end())

scheint mir die klarste Syntax:

  • Sie beenden den Client unabhängig von den Ergebnissen.
  • Sie greifen auf das Ergebnis vor dem Ende zu der Kunde.
  • Sie grenzen/schließen den Client nicht innerhalb Ihrer Callbacks

Es ist diese Art von Gegensatz zwischen den beiden Syntaxen, die auf den ersten Blick verwirrend sein mag, aber da steckt keine Magie drin, es ist Implementierungskonstruktionssyntax. Konzentrieren Sie sich auf Ihre Rückrufe und Abfragen, nicht auf diesen Konstrukten, holen Sie sich einfach das eleganteste für Ihre Augen und füttern Sie es mit Ihrem Code.

*Ich habe die Kommentare // your xxx here hinzugefügt zur Verdeutlichung