sql >> Database >  >> RDS >> PostgreSQL

wanneer de verbinding verbreken en wanneer een pg-client of pool beëindigen

Ten eerste uit de pg-documentatie *:

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
      })
  })

Deze code/constructie is voldoende /gemaakt om uw zwembad werkend te krijgen, door hier uw ding te bieden dingen. Als u uw toepassing afsluit, zal de verbinding normaal blijven hangen, aangezien de pool goed is gemaakt, precies niet om vast te lopen, zelfs als het een handmatige manier van ophangen biedt, zie laatste gedeelte van de artikel .Kijk ook naar het vorige rode gedeelte waarin staat "Je moet de klant altijd terugsturen..." om te accepteren

  • de verplichte client.release() instructie
  • voordat je naar het argument gaat.
  • je bereik/sluitingscliënt binnen je callbacks.

Dan , uit de pg.client-documentatie *:

Vraag in platte tekst met een belofte

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())

lijkt mij de duidelijkste syntaxis:

  • je beëindigt de klant, ongeacht de resultaten.
  • je opent het resultaat voor eindigt de klant.
  • u bestrijkt/sluit de klant niet binnen uw callbacks

Het is dit soort tegenstelling tussen de twee syntaxis dat op het eerste gezicht verwarrend kan zijn, maar er zit geen magie in, het is de syntaxis van de implementatieconstructie. Focus op uw callbacks en vragen, niet op die constructies, pak gewoon de meest elegante voor uw ogen en voer deze met uw code.

*Ik heb de opmerkingen toegevoegd // je xxx hier voor de duidelijkheid



  1. IPv6 opslaan in database

  2. IntegrityError:(1062, dubbele invoer voor sleutel)

  3. MySQL Tijdzone verwarring

  4. Best practices met historische gegevens in de MySQL-database