外部アプリケーションの接続
Databases for EnterpriseDB は非推奨です。 2025年6月16日現在、新しいインスタンスを展開することはできません。 既存のインスタンスは2025年10月15日までサポートされます。 その日までにまだ存在しているインスタンスはすべて削除されます。 詳細は Databases for EnterpriseDB の廃止 を参照してください。
アプリケーションとドライバーは、接続文字列を使用して、IBM Cloud® Databases for EnterpriseDB との接続を確立します。 このサービスは、ドライバーおよびアプリケーション専用の接続ストリングを提供します。 接続文字列は、 デプロイの「概要」 _の「エンドポイント」パネル_に表示され、 Cloud Databases および Cloud Databases からも取得できます。
接続文字列は、デプロイで作成する任意の認証情報で使用できます。 すべての接続およびアプリケーションで管理ユーザーを使用することが可能ですが、使用するアプリケーションに接続するための専用のユーザーを作成する方がよい場合もあります。 資格情報の生成方法については、ユーザーの作成と接続文字列の取得についてのページを参照してください。
言語のドライバーによる接続
ドライバーがデプロイメントに接続するために必要な情報はすべて、「Postgres」セクションの接続文字列に入っています。 参照用に、接続文字列の構成要素を次の表に示します。
フィールド名 | 索引 | 説明 |
---|---|---|
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を参照してください。
自己署名証明書の使用
- _「エンドポイント」_ペインまたは接続情報の Base64 フィールドから証明書情報をコピーします。
- 必要に応じて、Base64 ストリングをテキストにデコードします。
- 証明書をファイルに保存します (提供された名前を使用することも独自のファイル名を使用することもできます)。
- ドライバーまたはクライアントに証明書へのパスを提供します。
自己署名証明書の CLI プラグイン・サポート
コマンド ibmcloud cdb deployment-cacert "your-service-name"
を使用して、デプロイメントのデコードされた証明書を CLI プラグインと共に表示することができます。 これにより、base64 がテキストにデコードされます。 コマンドの出力をコピーしてファイルに保存し、そのファイルのパスをドライバーに提供します。
その他のドライバー
PostgreSQL には、他にも、IBM Cloud® Databases for EnterpriseDB のデプロイメントに接続するために使用できる多様な言語のドライバーがあります。 最もよく使用されているドライバーを以下の表にいくつか示します。
言語 | ドライバー | 例 |
---|---|---|
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) |