PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

quand se déconnecter et quand terminer un client ou un pool pg

Tout d'abord, à partir de la documentation pg * :

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

Ce code/construction est suffisant /fait pour faire fonctionner votre piscine, fournissant le votre truc ici des choses. Si vous arrêtez votre application, la connexion se bloquera normalement, car le pool est bien créé, exactement pour ne pas se bloquer, même s'il fournit un moyen manuel de se bloquer, voir la dernière section du article .Regardez aussi la section rouge précédente qui dit "Vous devez toujours retourner le client..." pour accepter

  • le client.release() obligatoire instructions
  • avant d'accéder à l'argument.
  • vous étendez/fermez le client dans vos rappels.

Alors , à partir de la documentation pg.client * :

Requête en texte brut avec une promesse

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

me semble la syntaxe la plus claire :

  • vous mettez fin au client quels que soient les résultats.
  • vous accédez au résultat avant de terminer le client.
  • vous ne délimitez/fermez pas le client dans vos rappels

C'est ce genre d'opposition entre les deux syntaxes qui peut prêter à confusion à première vue, mais il n'y a pas de magie là-dedans, c'est une syntaxe de construction d'implémentation. Concentrez-vous sur votre rappels et requêtes, pas sur ces constructions, choisissez simplement le plus élégant pour vos yeux et alimentez-le avec votre code.

*J'ai ajouté les commentaires // votre xxx ici pour plus de clarté