IBM Cloud Docs
外部アプリケーションの接続

外部アプリケーションの接続

Databases for EnterpriseDB は非推奨です。 2025年6月16日現在、新しいインスタンスを展開することはできません。 既存のインスタンスは2025年10月15日までサポートされます。 その日までにまだ存在しているインスタンスはすべて削除されます。 詳細は Databases for EnterpriseDB の廃止 を参照してください。

アプリケーションとドライバーは、接続文字列を使用して、IBM Cloud® Databases for EnterpriseDB との接続を確立します。 このサービスは、ドライバーおよびアプリケーション専用の接続ストリングを提供します。 接続文字列は、 デプロイの「概要」 _の「エンドポイント」パネル_に表示され、 Cloud Databases および Cloud Databases からも取得できます。

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

言語のドライバーによる接続

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

postgres/URI接続情報
フィールド名 索引 説明
Type 接続のタイプ - IBM Cloud® Databases for EnterpriseDB の場合は「URI」
Scheme URI のスキーム - IBM Cloud® Databases for EnterpriseDB の場合は「postgresql」
Path URI のパス - IBM Cloud® Databases for EnterpriseDB の場合はデータベース名。 デフォルトは 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 つ以上含まれている可能性があることを示します。

接続情報の「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 ドライバー node-postgres を使用して、データベースに接続します。

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

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

// set up a client with your Databases for EnterpriseDB connection string
let client = new pg.Client({ connectionString: connectionString,
    // set up the TLS options
    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();
            }
        );
    }
});

ドライバー TLS および自己署名証明書のサポート

IBM Cloud® Databases for EnterpriseDB へのすべての接続は TLS 1.2 が有効になっているので、接続に使用するドライバーは、暗号化のサポートが可能であることが必要です。 また、デプロイメントには、ドライバーが接続時にサーバーを検証するために使用できる自己署名証明書も用意されています。

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

自己署名証明書の使用

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

自己署名証明書の CLI プラグイン・サポート

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

その他のドライバー

PostgreSQL には、他にも、IBM Cloud® Databases for EnterpriseDB のデプロイメントに接続するために使用できる多様な言語のドライバーがあります。 最もよく使用されているドライバーを以下の表にいくつか示します。

PostgreSQL ドライバー
言語 ドライバー
PHP pgsql リンク
Ruby ruby-pg リンク
Ruby on Rails Rails Rails ガイド
C# ODBC リンク
Go pq リンク
Node node-postgres リンク
JDBC EDB Postgres JDBC Connector [JDBC ガイド](https://www.enterprisedb.com/edb-docs/d/jdbc-connector/user-guides/jdbc-guide/42.2.8.1/ using_the_advanced_server_jdbc_connector_with_java_applications.html)