Connessione di una applicazione esterna alla distribuzione PostgreSQL
Le tue applicazioni e i tuoi driver utilizzano stringhe di connessione per effettuare una connessione a IBM Cloud® Databases for PostgreSQL. Il servizio fornisce stringhe di connessione specifiche per driver e applicazioni. Le stringhe di connessione sono visualizzate nel riquadro Endpoint della Panoramicadella tua distribuzione e possono essere richiamate anche dall'APICloud Databases e dall'API Cloud Databases.
Le stringhe di connessione possono essere utilizzate da qualsiasi credenziale creata nella propria distribuzione. Mentre puoi utilizzare l'utente amministratore per tutte le tue connessioni e applicazioni, potrebbe essere meglio creare utenti specificamente per le tue applicazioni con cui connetterti. Per ulteriori informazioni, vedere Attribuzione delle stringhe di connessione.
Connessione alla distribuzione PostgreSQL con il driver di una lingua
Tutte le informazioni di cui un driver ha bisogno per stabilire una connessione alla tua distribuzione si trovano nella sezione "postgres" delle tue stringhe di connessione. La tabella contiene una suddivisione per riferimento.
Nome campo | Indice | Descrizione |
---|---|---|
Type |
Tipo di connessione - per PostgreSQL, è "URI". | |
Scheme |
Schema per un URI - per PostgreSQL, è "postgresql". | |
Path |
Percorso per un URI - per PostgreSQL, è il nome del database. Il valore predefinito è ibmclouddb . |
|
Authentication |
Username |
Il nome utente utilizzato per la connessione. |
Authentication |
Password |
Una password per l'utente - potrebbe essere mostrata come $PASSWORD |
Authentication |
Method |
Come avviene l'autenticazione; l'autenticazione "diretta" è gestita dal driver. |
Hosts |
0... |
Un nome di host e una porta a cui connettersi. |
Composed |
0... |
Un URI che combina Schema, Autenticazione, Host e Percorso. |
Certificate |
Name |
Il nome assegnato per il certificato proprietario del servizio per la distribuzione del database. |
Certificate |
Base64 | Una versione codificata base64 del certificato. |
0...
indica che in un array potrebbero essere presenti una o più di queste voci.
Molti driver PostgreSQL sono in grado di creare una connessione alla tua distribuzione quando viene fornita la stringa di connessione formattata URI trovata nel campo "composto" delle informazioni di connessione. Ad esempio,
postgres://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?sslmode=verify-full
Il seguente esempio utilizza le informazioni dalla stringa di connessione e il Java jdbc
per connettersi al database.
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());
}
}
}
Il seguente esempio utilizza le informazioni dalla stringa di connessione e il Python Psycopg2
per connettersi al tuo database. Questo è solo un semplice
esempio di connessione, senza la gestione degli errori o la logica dei tentativi e potrebbe non essere adatto per la produzione.
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])
Il seguente esempio utilizza le informazioni dalla tua stringa di connessione e il driver Node node-postgres
per connettersi al tuo database.
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();
}
);
}
});
Per utilizzare node-postgres driver
, rimuovere il parametro sslmode
dalla stringa di connessione della distribuzione. In caso contrario, questo parametro sovrascrive i parametri ssl: {...}
, impedendo il
corretto caricamento del certificato CA.
Driver TLS e supporto per i certificati proprietari del servizio
Tutte le connessioni a Databases for PostgreSQL sono abilitate TLS 1.2, quindi il driver che utilizzi per la connessione deve essere in grado di supportare la crittografia. L'installazione viene fornita anche con un certificato proprietario del servizio, in modo che il driver possa verificare il server al momento della connessione.
Per ulteriori informazioni, vedi Cloud Databases Certificates FAQ.
Utilizzo del certificato proprietario del servizio
- Copiare le informazioni sul certificato dal pannello Endpoint o dal campo Base64 delle informazioni di connessione.
- Se necessario, decodificare la stringa Base64 in testo.
- Salvare il certificato in un file. (È possibile utilizzare il nome fornito o il proprio nome file).
- Fornire il percorso del certificato al driver o al client.

Supporto del plug-in CLI per il certificato proprietario del servizio
Puoi visualizzare il certificato decodificato per la tua distribuzione con il plug-in CLI con il comando ibmcloud cdb deployment-cacert "example-deployment"
. Decodifica base64 in testo. Copiare e salvare l'output del
comando in un file e fornire il percorso del file al driver.
Altri driver
PostgreSQL ha una vasta gamma di driver linguistici. La tabella comprende alcuni dei più comuni.
Lingua | Unità | Esempi |
---|---|---|
PHP | pgsql |
Link |
Ruby | ruby-pg |
Link |
Ruby on Rails | Rails | Link |
C# | ODBC |
Link |
Vai | pq |
Link |
Node | node-postgres |
Link |