PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

кога да прекъснете връзката и кога да прекратите pg клиент или пул

Първо, от 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
      })
  })

Този код/конструкция е достатъчен /направени, за да накарате вашия басейн да работи, предоставяйки вашето нещо тук неща. Ако затворите приложението си, връзката ще увисне нормално, тъй като пулът е създаден добре, точно така, че да не увисне, дори ако предоставя ръчен начин за увисване, вижте последния раздел на статия .Вижте също предишната червена секция, която гласи „Винаги трябва да връщате клиента...“, за да приемете

  • задължителния client.release() инструкция
  • преди достъп до аргумент.
  • клиент за обхват/затваряне във вашите обратни извиквания.

Тогава , от документацията на pg.client *:

Заявка с обикновен текст с обещание

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

ми се струва най-ясният синтаксис:

  • прекратявате клиента независимо от резултатите.
  • имате достъп до резултата преди край клиента.
  • не обхващате/затваряте клиента във вашите обратни извиквания

Това е този вид противопоставяне между двата синтаксиса, което може да е объркващо на пръв поглед, но в него няма магия, това е синтаксис за конструиране на изпълнение. Съсредоточете се върху вашия обратни извиквания и заявки, не на тези конструкции, просто изберете най-елегантното за очите си и го захранете с код.

*Добавих коментарите // вашия xxx тук за яснота



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате Haproxy и Keepalived

  2. MySQL срещу PostgreSQL за уеб приложения

  3. Задаване на схема за всички заявки на връзка в psycopg2:Получаване на условие за състезание при настройка на search_path

  4. Как да конвертирате колона на таблица в друг тип данни

  5. Django Postgres ArrayField агрегиране и филтриране