PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

kiedy się rozłączyć, a kiedy zakończyć klienta lub pulę pg

Najpierw z dokumentacji 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
      })
  })

Ten kod/konstrukcja jest wystarczająca /stworzony, aby Twój basen działał, zapewniając Twoją rzecz tutaj rzeczy. Jeśli zamkniesz aplikację, połączenie zawiesi się normalnie, ponieważ pula jest utworzona poprawnie, dokładnie po to, aby się nie zawieszać, nawet jeśli zapewnia ręczny sposób zawieszania, zobacz ostatnią sekcję artykuł .Spójrz także na poprzednią czerwoną sekcję, która mówi „Zawsze musisz zwrócić klienta...”, aby zaakceptować

  • obowiązkowe client.release() instrukcja
  • przed uzyskaniem dostępu do argumentu.
  • Twój zakres/klient zamknięcia w ramach wywołań zwrotnych.

Wtedy , z dokumentacji pg.client *:

Zwykłe zapytanie tekstowe z obietnicą

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

wydaje mi się najczystszą składnią:

  • zakończysz klienta bez względu na wyniki.
  • dostęp do wyniku przed zakończeniem klienta.
  • nie ograniczasz/nie zamykasz klienta w ramach wywołań zwrotnych

Jest to rodzaj opozycji między dwiema składniami, który może być mylący na pierwszy rzut oka, ale nie ma w tym żadnej magii, jest to składnia konstrukcji implementacji. Skup się na swojej wywołania zwrotne i zapytania, a nie te konstrukcje, po prostu wybierz najbardziej eleganckie dla twoich oczu i nakarm je swoim kod.

*Dodałem komentarze // tutaj Twój xxx dla jasności



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać wiele wierszy wypełnionych stałymi w Amazon Redshift?

  2. Używanie Kubernetes do wdrażania PostgreSQL

  3. UTWÓRZ UNIKALNY INDEKS, JEŚLI NIE ISTNIEJE w postgreSQL

  4. ClassNotFoundException z PostgreSQL i JDBC

  5. SQL 'AT TIME ZONE', zapytanie szerokie i wyrażenie 'SELECT' dla wszystkich kolumn (nazwa_tabeli.*)