PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

quando desconectar e quando encerrar um cliente ou pool de pg


Primeiro, na documentação 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/construção é suficiente /feito para fazer seu pool funcionar, fornecendo o sua coisa aqui coisas. Se você encerrar sua aplicação, a conexão irá travar normalmente, pois o pool é bem criado, exatamente para não travar, mesmo que forneça uma forma manual de travamento, veja a última seção do artigo .Veja também a seção vermelha anterior que diz "Você deve sempre devolver o cliente..." para aceitar
  • o client.release() obrigatório instrução
  • antes de acessar o argumento.
  • seu escopo/encerramento do cliente em seus retornos de chamada.

Então , da documentação pg.client *:

Consulta de texto simples com uma promessa
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())

parece-me a sintaxe mais clara:
  • você encerra o cliente independentemente dos resultados.
  • você acessa o resultado antes de terminar o cliente.
  • você não delimita/fecha o cliente em seus retornos de chamada

É esse tipo de oposição entre as duas sintaxes que pode ser confusa à primeira vista, mas não há mágica nisso, é a sintaxe de construção da implementação. Concentre-se em seu retornos de chamada e consultas, não nessas construções, apenas escolha o mais elegante para seus olhos e alimente-o com seu código.

*Adicionei os comentários // seu xxx aqui para clareza