PostgreSQL 배치에 외부 애플리케이션 연결
애플리케이션 및 드라이버는 연결 문자열을 사용하여 IBM Cloud® Databases for PostgreSQL에 연결합니다. 서비스는 드라이버 및 애플리케이션용으로 특별히 연결 문자열을 제공합니다. 연결 문자열은 배포 개요의 엔드포인트 패널에 표시되며 Cloud Databases CLI 플러그인 및 Cloud Databases API에서도 검색할 수 있습니다.
연결 문자열은 배포에서 생성한 모든 자격 증명에서 사용할 수 있습니다. 모든 연결 및 애플리케이션에 admin 사용자를 사용할 수 있지만 애플리케이션을 연결하기 위해 특별히 사용자를 작성하는 것이 좋습니다. 자세한 내용은 연결 문자열 가져오기 를 참조하세요.
언어 드라이버를 사용하여 PostgreSQL 배치에 연결
드라이버가 배치에 연결하는 데 필요한 모든 정보는 연결 문자열의 "postgres" 섹션에 있습니다. 이 표에는 참조에 대한 분석이 포함되어 있습니다.
| 필드 이름 | 색인 | 설명 |
|---|---|---|
Type |
연결 유형 - PostgreSQL, 의 경우 "URI"입니다. | |
Scheme |
URI의 스키마 - PostgreSQL, 의 경우 "postgresql"입니다. | |
Path |
URI의 경로. PostgreSQL의 경우 데이터베이스 이름입니다. 기본값은 ibmclouddb입니다. |
|
Authentication |
Username |
연결하는 데 사용하는 사용자 이름입니다. |
Authentication |
Password |
사용자에 대한 비밀번호로 $PASSWORD로 표시될 수 있습니다. |
Authentication |
Method |
인증이 수행되는 방법이며 "직접" 인증은 드라이버에 의해 처리됩니다. |
Hosts |
0... |
연결할 호스트 이름 및 포트입니다. |
Composed |
0... |
스키마, 인증, 호스트 및 경로를 결합한 URI입니다. |
Certificate |
Name |
데이터베이스 배포를 위한 서비스 전용 인증서에 할당된 이름입니다. |
Certificate |
Base64 | base64 인코딩된 인증서 버전입니다. |
0...배열에 이러한 항목이 하나 이상 있을 수 있음을 표시합니다.
다수의 PostgreSQL 드라이버는 연결 정보의 "구성" 필드에 표시되는 URI 형식의 연결 문자열이 주어지면 배치에 연결할 수 있습니다. 예를 들면 다음과 같습니다.
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 Rail | Rails | 링크 |
| C# | ODBC |
링크 |
| Go | pq |
링크 |
| Node | node-postgres |
링크 |