IBM Cloud Docs
PostgreSQL デプロイメントへの外部アプリケーションの接続

PostgreSQL デプロイメントへの外部アプリケーションの接続

アプリケーションおよびドライバーは、IBM Cloud® Databases for PostgreSQL への接続に接続ストリングを使用します。 このサービスは、ドライバーおよびアプリケーション専用の接続ストリングを提供します。 接続文字列は配置の [概要][エンドポイント] パネルに表示され、Cloud Databases CLI プラグインCloud Databases API からも取得できます。

接続文字列は、デプロイ時に作成した任意の資格情報で使用できます。 すべての接続およびアプリケーションで管理ユーザーを使用することが可能ですが、使用するアプリケーションに接続するための専用のユーザーを作成する方がよい場合もあります。 詳細は 接続文字列の取得 を参照してください。

言語のドライバーを使用した PostgreSQL デプロイメントへの接続

ドライバーがデプロイメントに接続するために必要な情報はすべて、「Postgres」セクションの接続文字列に入っています。 参照用に、接続文字列の構成要素を次の表に示します。

postgres/URI接続情報
フィールド名 索引 説明
Type 接続のタイプ - PostgreSQL, の場合は「URI」。
Scheme URIのスキーム - PostgreSQL, の場合は "postgresql" です。
Path URI のパス - PostgreSQL の場合はデータベース名。 デフォルトは ibmclouddb です。
Authentication Username 接続に使用するユーザー名。
Authentication Password ユーザーのパスワード。$PASSWORD と表示される場合があります。
Authentication Method 認証が行われる方法。「direct」認証はドライバーによって処理されます。
Hosts 0... ホスト名と接続先ポート。
Composed 0... Scheme、Authentication、Host、Pathを組み合わせたURI。
Certificate Name データベース展開のためのサービス専有証明書の割り当て名。
Certificate Base64 base64 でエンコードされたバージョンの証明書
  • 0... は、1 つの配列にこれらのエントリーが 1 つ以上ある可能性があることを示しています。

接続情報の「Composed」フィールドにある URI 形式の接続文字列を指定すれば、PostgreSQL ドライバーの多くはデプロイメントに接続できます。 以下に例を示します。

postgres://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?sslmode=verify-full

以下の例では、接続ストリングおよび Java ドライバー jdbc からの情報を使用して、データベースに接続します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.logging.*;

public class PGConnect {

    private final static Logger LOGGER = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);

    private Connection connect() {

        final String url = "jdbc:postgresql://host:port/ibmclouddb";

        Properties props = new Properties();
        props.setProperty("user","admin");
        props.setProperty("password","mypassword123");
        props.setProperty("ssl","true");
        props.setProperty("sslmode","verify-full");
        props.setProperty("sslrootcert", "/path/to/cert");

        Connection conn = null;
        while (conn == null) {
            try {
                conn = DriverManager.getConnection(url, props);
                System.out.println("Connected to PG");
            } catch (SQLException e) {
                System.out.printf("%s\n", e);
                LOGGER.info("Not connected, retying ...");
            }
        }

        return conn;

    }

    public static void main(String[] args) {

        PGConnect icd = new PGConnect();

        try {
            Connection connection = icd.connect();
            Statement stmt = connection.createStatement();

            ResultSet rs = stmt.executeQuery("SELECT * from pg_database");
            while (rs.next()) {
                System.out.println("DB Name: " + rs.getString(1));
            }

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }   
    }
}

以下の例では、接続ストリングおよび Python ドライバー Psycopg2 からの情報を使用して、データベースに接続します。 これは接続の簡単な例に過ぎません。エラー処理も再試行ロジックもないので、実稼働環境に適しているとはいえません。

import psycopg2

try:
    conn = psycopg2.connect(
      host="hostname.databases.appdomain.cloud",
      port= 31525,
      user="username",
      password="password",
      sslmode="verify-full",
      sslrootcert="/path/to/cert/ca-certificate.crt",
      database="ibmclouddb")
except:
    print("Unable to connect to database")

cur = conn.cursor()
cur.execute("SELECT datname FROM pg_database")
rows = cur.fetchall()

print("List of databases:")
for row in rows:
    print("  ",row[0])

以下の例では、接続ストリングおよびノード・ドライバー node-postgres からの情報を使用して、データベースに接続します。

const pg = require("pg");
const fs = require("fs");

let connectionString = "postgres://<username>:<password>@<host>:<port>/<database>";
let caCert = fs.readFileSync('/path/to/cert');

// set up a client with your PostgreSQL connection string and TLS options
let client = new pg.Client({
    connectionString: connectionString,
    ssl: {
    ca: caCert,
    rejectUnauthorized: true
    }
});


client.connect(function(err) {
    if (err) {
        console.log(err);
        process.exit(1);
    } else {
        // query for the names of the databases
        client.query(
            "SELECT datname FROM pg_database;",
            function(err, result) {
                if (err) {
                    console.log(err);
                }
                // return the names of the databases
                console.log(result.rows);
                client.end();
            }
        );
    }
});

node-postgres driver を使用するには、デプロイメントの接続ストリングから sslmode パラメーターを削除します。 そうでない場合、このパラメーターは ssl: {...} パラメーターをオーバーライドして、CA 証明書が正しくロードされないようにします。

ドライバーTLSおよびサービス独自証明書のサポート

Databases for PostgreSQL へのすべての接続は TLS 1.2 対応であることから、接続に使用するドライバーが暗号化をサポートできるようにする必要があります。 また、ドライバが接続時にサーバを検証できるように、配備にはサービス専有証明書も付属しています。

詳しくは、 Cloud Databases Certificates FAQを参照してください。

サービス独自証明書の使用

  1. *「エンドポイント」*パネルまたは接続情報の Base64 フィールドから証明書情報をコピーします。
  2. 必要に応じて、Base64 ストリングをテキストにデコードします。
  3. 証明書をファイルに保存します (ファイル名は、提供される名前をそのまま使用することも、自分で指定することもできます)。
  4. ドライバーまたはクライアントに証明書へのパスを提供します。

CLI エンドポイントパネル
CLI プラグイン情報タブ

サービス独自証明書のCLIプラグインサポート

CLI プラグインを使用すると、デプロイメントのデコードされた証明書をコマンド ibmcloud cdb deployment-cacert "example-deployment" で表示できます。 これにより、base64 がテキストにデコードされます。 コマンドの出力をコピーしてファイルに保存し、そのファイルのパスをドライバーに提供します。

その他のドライバー

PostgreSQL には、さまざまな言語ドライバーがあります。 最もよく使用されているドライバーを以下の表にいくつか示します。

PostgreSQL ドライバー
言語 ドライバー
PHP pgsql リンク
Ruby ruby-pg リンク
Ruby on Rails Rails リンク
C# ODBC リンク
Go pq リンク
Node node-postgres リンク