sql >> データベース >  >> RDS >> PostgreSQL

アプリの起動時にpg-promiseとのデータベース接続を確認する

    私はpg-promiseの作者です;)そして、この質問がされるのはこれが初めてではないので、ここで詳細な説明をします。

    次のような新しいデータベースオブジェクトをインスタンス化する場合:

    const db = pgp(connection);
    

    ...すべてのこと-オブジェクトを作成しますが、接続は試みません。ライブラリは接続プールの上に構築されており、実際のクエリメソッドのみがプールからの接続を要求します。

    公式ドキュメントから:

    オブジェクトdb 遅延データベース接続を使用したデータベースプロトコルを表します。つまり、実際のクエリメソッドのみが接続を取得および解放します。したがって、グローバル/共有のdbを1つだけ作成する必要があります 接続の詳細ごとのオブジェクト。

    ただし、さらに示すように、メソッドconnectを呼び出すことにより、接続を強制することができます。この方法はクエリを連鎖させるための推奨される方法ではありませんが(タスクを使用する必要があります)、一般的に接続をチェックするのに便利です。

    自分の投稿から例をコピーしました:https://github.com/vitaly-t/pg-promise/issues/81

    以下は、2つの方法で同時に実行する例です。そのため、どちらのアプローチを選択することもできます。

    const initOptions = {
        // global event notification;
        error(error, e) {
            if (e.cn) {
                // A connection-related error;
                //
                // Connections are reported back with the password hashed,
                // for safe errors logging, without exposing passwords.
                console.log('CN:', e.cn);
                console.log('EVENT:', error.message || error);
            }
        }
    };
        
    const pgp = require('pg-promise')(initOptions);
        
    // using an invalid connection string:
    const db = pgp('postgresql://userName:[email protected]:port/database');
        
    db.connect()
        .then(obj => {
            // Can check the server version here (pg-promise v10.1.0+):
            const serverVersion = obj.client.serverVersion;
    
            obj.done(); // success, release the connection;
        })
        .catch(error => {
            console.log('ERROR:', error.message || error);
    });
    

    出力:

    CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432

    ライブラリ内のすべてのエラーは、最初にグローバルエラーイベントハンドラーを介して報告され、その後、対応する.catch内でエラーが報告されます。 ハンドラー。

    更新

    接続をテストし、サーバーのバージョンを1つのステップで取得するための最新のアプローチ:

    // tests connection and returns Postgres server version,
    // if successful; or else rejects with connection error:
    async function testConnection() {
        const c = await db.connect(); // try to connect
        c.done(); // success, release connection
        return c.client.serverVersion; // return server version
    }
    

    リンク

    • メソッド接続
    • イベントエラー


    1. OracleSQLで2つの日付/時刻の差を計算します

    2. SQLite Length()のしくみ

    3. オンライン求人ポータル用のデータベースの設計

    4. オンライン調査のためのデータベースモデル。パート3