PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

kapan harus memutuskan dan kapan harus mengakhiri pg client atau pool

Pertama, dari dokumentasi 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
      })
  })

Kode/konstruksi ini cukup /made agar kumpulan Anda berfungsi, menyediakan barang Anda di sini sesuatu. Jika Anda mematikan aplikasi Anda, koneksi akan hang secara normal, karena pool dibuat dengan baik, tepatnya tidak untuk hang, bahkan jika itu menyediakan cara manual untuk menggantung, lihat bagian terakhir dari artikel .Juga lihat bagian merah sebelumnya yang mengatakan "Anda harus selalu mengembalikan klien..." untuk menerima

  • wajib client.release() instruksi
  • sebelum mengakses argumen.
  • klien cakupan/penutupan Anda dalam panggilan balik Anda.

Lalu , dari dokumentasi pg.client *:

Kueri teks biasa dengan janji

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

menurut saya sintaks yang paling jelas:

  • Anda mengakhiri klien apa pun hasilnya.
  • Anda mengakses hasilnya sebelum berakhir klien.
  • Anda tidak membatasi/menutup klien dalam panggilan balik Anda

Pertentangan semacam ini antara dua sintaksis yang mungkin membingungkan pada pandangan pertama, tetapi tidak ada keajaiban di sana, ini adalah sintaks konstruksi implementasi. Fokus pada Anda panggilan balik dan kueri, bukan pada konstruksi itu, ambil saja yang paling elegan untuk mata Anda dan beri makan dengan Anda kode.

*Saya menambahkan komentar // xxx Anda di sini untuk kejelasan



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hapus orang tua jika tidak dirujuk oleh anak lain

  2. Hasilkan sql dengan subquery sebagai kolom dalam pernyataan pilih menggunakan SQLAlchemy

  3. instalasi postgresql gagal

  4. Hibernasi sisipan multi baris postgresql

  5. ORDER BY ... MENGGUNAKAN klausa di PostgreSQL