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