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

    私には最も明確な構文のようです:

    • 結果がどうであれ、クライアントを終了します。
    • 終了する前に結果にアクセスします クライアント。
    • コールバック内でクライアントをスコープ/クロージャしない

    一見混乱するかもしれないのは、2つの構文間のこの種の対立ですが、そこには魔法はなく、実装構築構文です。あなたのに焦点を当ててください。 これらの構成要素ではなく、コールバックとクエリは、あなたの目に最もエレガントなものを選び、あなたの目でそれを養う コード。

    *コメントを追加しました//ここにあなたのxxx わかりやすくするために



    1. UUIDの最大文字長

    2. mysql_insert_id()を使用せずに最後に挿入されたレコードのIDを取得します

    3. ScrollPaneのSqliteデータと自動作成ボタン

    4. Codeigniterのアクティブレコードを使用してJOINされたテーブルを更新することは可能ですか?