將外部應用程式連接至 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 |
如何進行鑑別; 由驅動程式處理「直接」鑑別。 |
Hosts |
0... |
要連線的主機名稱和連接埠。 |
Composed |
0... |
結合 Scheme、Authentication、Host 和 Path 的 URI。 |
Certificate |
Name |
用於資料庫部署的服務專屬憑證的已分配名稱。 |
Certificate |
Base64 | 憑證的 base64 編碼版本。 |
0...
表示陣列中可能有一或多個這些項目。
當在連線資訊的 "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>";
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 憑證常見問題(FAQ)。
使用服務專屬憑證
- 從 端點 畫面或連線資訊的 Base64 欄位複製憑證資訊。
- 必要的話,將 Base64 字串解碼為文字。
- 將憑證儲存至檔案。 (您可以使用所提供的名稱或您自己的檔名)。
- 提供驅動程式或用戶端的憑證路徑。

CLI 外掛程式支援服務專屬憑證
您可以使用指令 ibmcloud cdb deployment-cacert "example-deployment"
,使用 CLI 外掛程式來顯示部署的已解碼憑證。 它會將 base64 解碼成文字。 將指令的輸出複製並儲存至檔案,並提供檔案的驅動程式路徑。
其他驅動程式
PostgreSQL 擁有大量的語言驅動程式。 此表格涵蓋一些最常見的語言驅動程式。
語言 | 驅動程式 | 範例 |
---|---|---|
PHP | pgsql |
鏈結 |
Ruby | ruby-pg |
鏈結 |
Ruby on Rails | Rails | 鏈結 |
C# | ODBC |
鏈結 |
進行 | pq |
鏈結 |
Node | node-postgres |
鏈結 |