sql >> Base de Datos >  >> RDS >> PostgreSQL

cuándo desconectarse y cuándo finalizar un cliente pg o grupo

Primero, de la documentación de 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
      })
  })

Este código/construcción es suficiente /Hecho para que su grupo funcione, proporcionando lo lo suyo aquí cosas. Si cierra su aplicación, la conexión se bloqueará normalmente, ya que el grupo se crea bien, exactamente para no bloquearse, incluso si proporciona una forma manual de bloqueo, consulte la última sección de artículo .Mira también el apartado rojo anterior que dice "Siempre debes devolver el cliente..." para aceptar

  • el client.release() obligatorio instrucción
  • antes de acceder al argumento.
  • su cliente de alcance/cierre dentro de sus devoluciones de llamada.

Entonces , de la documentación de pg.client *:

Consulta de texto sin formato con una promesa

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 parece la sintaxis más clara:

  • terminas con el cliente sin importar los resultados.
  • accede al resultado antes de finalizar el cliente.
  • no delimita/cierra el cliente dentro de sus devoluciones de llamada

Es este tipo de oposición entre las dos sintaxis lo que puede resultar confuso a primera vista, pero no hay magia ahí, es una sintaxis de construcción de implementación. Concéntrese en su devoluciones de llamada y consultas, no en esas construcciones, solo elija la más elegante para sus ojos y alimente con su código.

*Agregué los comentarios // tu xxx aquí para mayor claridad