IBM Cloud Docs
Externe Anwendung mit Ihrer PostgreSQL-Implementierung verbinden

Externe Anwendung mit Ihrer PostgreSQL-Implementierung verbinden

Ihre Anwendungen und Treiber verwenden Verbindungszeichenfolgen, um eine Verbindung zu IBM Cloud® Databases for PostgreSQL herzustellen. Der Service bietet Verbindungszeichenfolgen speziell für Treiber und Anwendungen. Verbindungszeichenfolgen werden im Bereich Endpunkte in der Übersicht Ihrer Bereitstellung angezeigt und können auch über das Cloud Databases CLI-Plug-in und die Cloud Databases API abgerufen werden.

Die Verbindungszeichenfolgen können von jedem der Anmeldeinformationen verwendet werden, die Sie für Ihre Bereitstellung erstellen. Sie können zwar den Benutzer mit Administratorberechtigung für alle Verbindungen und Anwendungen verwenden, es kann jedoch sinnvoller sein, Benutzer speziell für die Anwendungen zu erstellen, zu denen diese eine Verbindung herstellen möchten. Weitere Informationen finden Sie unter Erhalten von Verbindungsstrings.

Verbindung zu Ihrer PostgreSQL-Bereitstellung mit einem Sprachtreiber herstellen

Alle Informationen, die ein Treiber benötigt, um eine Verbindung zu Ihrer Bereitstellung herzustellen, sind im Abschnitt "postgres" Ihrer Verbindungszeichenfolgen enthalten. Die Tabelle enthält eine Aufgliederung zu Referenzzwecken.

postgres/URI-Verbindungsinformationen
Feldname Index Beschreibung
Type Art der Verbindung - für PostgreSQL, ist es "URI".
Scheme Schema für einen URI - für PostgreSQL, ist es "postgresql".
Path Pfad für einen URI: Für PostgreSQL ist dieser der Datenbankname. Der Standardwert ist ibmclouddb.
Authentication Username Der Benutzername, den Sie zum Herstellen einer Verbindung verwenden
Authentication Password Ein Kennwort für den Benutzer; die Anzeige erfolgt gegebenenfalls in Form von $PASSWORD
Authentication Method Gibt an, wie die Authentifizierung erfolgt; die 'direkte' Authentifizierung wird vom Treiber abgewickelt
Hosts 0... Hostname und Port, zu denen die Verbindung hergestellt werden soll.
Composed 0... Ein URI, der Schema, Authentifizierung, Host und Pfad kombiniert.
Certificate Name Der zugewiesene Name für das diensteigene Zertifikat für die Datenbankbereitstellung.
Certificate Base64 Eine Version des Zertifikats in Base64-Codierung
  • 0... Gibt an, dass es möglicherweise weitere derartige Einträge in einem Array gibt.

Viele PostgreSQL-Treiber sind in der Lage, eine Verbindung zu Ihrer Bereitstellung herzustellen, wenn die im Feld "Zusammengesetzt" enthaltene URI-formatierte Verbindungszeichenfolge der Verbindungsinformationen angegeben wird. Beispiel:

postgres://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?sslmode=verify-full

Im folgenden Beispiel werden die Informationen aus Ihrer Verbindungszeichenfolge und dem Java-Treiber jdbc verwendet, um eine Verbindung zu Ihrer Datenbank herzustellen.

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());
        }   
    }
}

Im folgenden Beispiel werden die Informationen aus Ihrer Verbindungszeichenfolge und dem Python-Treiber Psycopg2 verwendet, um eine Verbindung zu Ihrer Datenbank herzustellen. Dies ist nur ein einfaches Verbindungsbeispiel ohne Fehlerbehandlung oder Wiederholungslogik, das möglicherweise nicht für die Produktion geeignet ist.

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])

Im folgenden Beispiel werden die Informationen aus Ihrer Verbindungszeichenfolge und dem Knotentreiber node-postgres verwendet, um eine Verbindung zu Ihrer Datenbank herzustellen.

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();
            }
        );
    }
});

Wenn Sie node-postgres driver verwenden möchten, entfernen Sie den Parameter sslmode aus der Verbindungszeichenfolge der Bereitstellung. Andernfalls überschreibt dieser Parameter die ssl: {...}-Parameter und verhindert, dass das CA-Zertifikat ordnungsgemäß geladen wird.

Unterstützung für Treiber-TLS und diensteigene Zertifikate

Alle Verbindungen zu Databases for PostgreSQL sind für TLS 1.2 aktiviert, sodass der Treiber, den Sie für die Verbindung verwenden, die Verschlüsselung unterstützen können muss. Ihre Bereitstellung umfasst auch ein diensteigenes Zertifikat, damit der Treiber den Server bei der Verbindung verifizieren kann.

Weitere Informationen finden Sie unter Cloud Databases Zertifikate-Häufig gestellte Fragen.

Verwendung des diensteigenen Zertifikats

  1. Kopieren Sie die Zertifikatsinformationen aus der Anzeige Endpunkte oder aus dem Feld Base64 der Verbindungsinformationen.
  2. Decodieren Sie bei Bedarf die Base64-Zeichenfolge in Text.
  3. Speichern Sie das Zertifikat in einer Datei. Sie können den angegebenen Namen verwenden oder einen eigenen Dateinamen angeben.
  4. Geben Sie gegenüber dem Treiber oder Client den Pfad zum Zertifikat an.

CLI-Endpunkte-Panel
Das CLI-Plugin-Informationsregister

CLI-Plugin-Unterstützung für das diensteigene Zertifikat

Sie können das dekodierte Zertifikat für Ihren Einsatz mit dem CLI-Plugin mit dem Befehl ibmcloud cdb deployment-cacert "example-deployment" anzeigen. Dadurch werden in Base64 codierte Zeichenfolgen in Text decodiert. Kopieren Sie die Ausgabe des Befehls, speichern Sie sie in einer Datei und geben Sie den Pfad der Datei für den Treiber an.

Andere Treiber

PostgreSQL verfügt über ein breites Spektrum an Sprachtreibern. Die Tabelle deckt die gängigsten Sprachen ab.

PostgreSQL-Treiber
Sprache Treiber Beispiele
PHP pgsql Link
Ruby ruby-pg Link
Ruby on Rails Rails Link
C# ODBC Link
Los pq Link
Node node-postgres Link