sql >> Database teknologi >  >> RDS >> PostgreSQL

hvornår man skal afbryde forbindelsen, og hvornår man skal afslutte en pg-klient eller pool

Først fra sidedokumentationen *:

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

Denne kode/konstruktion er tilstrækkelig /made for at få din pool til at fungere, hvilket giver din ting her ting. Hvis du lukker din applikation ned, vil forbindelsen hænge normalt, da poolen er skabt godt, præcis for ikke at hænge, ​​selvom den giver en manuel måde at hænge på, se sidste afsnit af artikel .Se også på det forrige røde afsnit, som siger "Du skal altid returnere klienten..." for at acceptere

  • den obligatoriske client.release() instruktion
  • før du får adgang til argumentet.
  • dit omfang/lukningsklient i dine tilbagekald.

, fra pg.client-dokumentationen *:

Almindelig tekstforespørgsel med et løfte

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

forekommer mig den klareste syntaks:

  • du afslutter klienten uanset resultaterne.
  • du får adgang til resultatet før slut klienten.
  • du begrænser/lukker ikke klienten i dine tilbagekald

Det er denne slags modsætning mellem de to syntakser, der kan være forvirrende ved første øjekast, men der er ingen magi deri, det er implementeringskonstruktionssyntaks. Fokuser på din tilbagekald og forespørgsler, ikke på disse konstruktioner, bare tag det mest elegante for dine øjne og tilfør det med din kode.

*Jeg tilføjede kommentarerne // din xxx her for klarhedens skyld



  1. MySQL InnoDB dødlås på SELECT med eksklusiv lås (TIL OPDATERING)

  2. Flere indekser vs Multi-kolonne indekser

  3. Kan ikke løse tabelnavn tæt på

  4. hvordan man gemmer ckeditor-indhold i mysql-databasen