PostgreSQL デプロイメントへの外部アプリケーションの接続
アプリケーションおよびドライバーは、IBM Cloud® Databases for PostgreSQL への接続に接続ストリングを使用します。 このサービスは、ドライバーおよびアプリケーション専用の接続ストリングを提供します。 接続文字列は配置の [概要] の [エンドポイント] パネルに表示され、Cloud Databases CLI プラグイン や Cloud Databases API からも取得できます。
接続文字列は、デプロイ時に作成した任意の資格情報で使用できます。 すべての接続およびアプリケーションで管理ユーザーを使用することが可能ですが、使用するアプリケーションに接続するための専用のユーザーを作成する方がよい場合もあります。 詳細は 接続文字列の取得 を参照してください。
言語のドライバーを使用した PostgreSQL デプロイメントへの接続
ドライバーがデプロイメントに接続するために必要な情報はすべて、「Postgres」セクションの接続文字列に入っています。 参照用に、接続文字列の構成要素を次の表に示します。
フィールド名 | 索引 | 説明 |
---|---|---|
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を参照してください。
サービス独自証明書の使用
- *「エンドポイント」*パネルまたは接続情報の Base64 フィールドから証明書情報をコピーします。
- 必要に応じて、Base64 ストリングをテキストにデコードします。
- 証明書をファイルに保存します (ファイル名は、提供される名前をそのまま使用することも、自分で指定することもできます)。
- ドライバーまたはクライアントに証明書へのパスを提供します。

サービス独自証明書のCLIプラグインサポート
CLI プラグインを使用すると、デプロイメントのデコードされた証明書をコマンド ibmcloud cdb deployment-cacert "example-deployment"
で表示できます。 これにより、base64 がテキストにデコードされます。 コマンドの出力をコピーしてファイルに保存し、そのファイルのパスをドライバーに提供します。
その他のドライバー
PostgreSQL には、さまざまな言語ドライバーがあります。 最もよく使用されているドライバーを以下の表にいくつか示します。
言語 | ドライバー | 例 |
---|---|---|
PHP | pgsql |
リンク |
Ruby | ruby-pg |
リンク |
Ruby on Rails | Rails | リンク |
C# | ODBC |
リンク |
Go | pq |
リンク |
Node | node-postgres |
リンク |