IBM Cloud Docs
Conectando um aplicativo externo à sua implementação do PostgreSQL

Conectando um aplicativo externo à sua implementação do PostgreSQL

Os seus aplicativos e drivers usam sequências de conexões para fazer uma conexão com o IBM Cloud® Databases for PostgreSQL. O serviço fornece sequências de conexões especificamente para drivers e aplicativos. As cadeias de conexão são exibidas no painel Endpoints da Visão geral da sua implantação e também podem ser recuperadas no plug-in Cloud Databases CLI e na API Cloud Databases.

As cadeias de conexão podem ser usadas por qualquer uma das credenciais que você criar em sua implantação. Embora seja possível usar o usuário admin para todas as conexões e os aplicativos, pode ser melhor criar usuários especificamente para as conexões dos aplicativos com eles. Para obter mais informações, consulte Obtenção de cadeias de conexão.

Conectando-se à sua implementação do PostgreSQL com um driver de linguagem

Todas as informações que um driver precisa para fazer uma conexão com sua implementação está na seção "postgres" de suas sequências de conexões. A tabela contém um detalhamento para referência.

informações de conexão postgres/URI
Nome do campo Index Descrição
Type Tipo de conexão - para PostgreSQL, é "URI".
Scheme Esquema para um URI - para PostgreSQL, é "postgresql".
Path Caminho para um URI - para o PostgreSQL é o nome do banco de dados. O padrão é ibmclouddb.
Authentication Username O nome do usuário usado para se conectar.
Authentication Password Uma senha para o usuário - pode ser mostrada como $PASSWORD
Authentication Method Como a autenticação ocorre; a autenticação "direta" é manipulada pelo driver.
Hosts 0... Um nome do host e uma porta aos quais se conectar.
Composed 0... Um URI que combina Scheme (esquema), Authentication (autenticação), Host (host) e Path (caminho).
Certificate Name O nome alocado para o certificado proprietário do serviço para a implementação do banco de dados.
Certificate Base64 Uma versão do certificado codificada em Base64.
  • 0... indica que pode haver uma ou mais dessas entradas em uma matriz.

Muitos drivers do PostgreSQL são capazes de fazer uma conexão com sua implementação quando fornecida a sequência de conexões formatada pelo URI localizada no campo "composto" das informações de conexão. Por exemplo,

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

O exemplo a seguir usa as informações de sua sequência de conexões e o driver Java jdbc para conectar-se ao seu banco de dados.

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

O exemplo a seguir usa as informações de sua sequência de conexões e o driver Python Psycopg2 para conectar-se ao seu banco de dados. Este é apenas um exemplo simples de conexão, sem manipulação de erros ou lógica de nova tentativa e pode não ser adequado para a produção.

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

O exemplo a seguir usa as informações de sua sequência de conexões e o driver Node node-postgres para conectar-se ao seu banco de dados.

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

Para usar o node-postgres driver, remova o parâmetro sslmode da string de conexão da implementação. Se não, este parâmetro substitui os parâmetros ssl: {...}, impedindo o certificado CA de carregar adequadamente.

Suporte ao TLS do driver e ao certificado proprietário do serviço

Todas as conexões com o Databases for PostgreSQL são ativadas pelo TLS 1.2, portanto, o driver usado para a conexão precisa ser capaz de suportar criptografia. Sua implementação também vem com um certificado de propriedade do serviço para que o driver possa verificar o servidor na conexão.

Para obter mais informações, consulte Cloud Databases FAQ de Certificados.

Usando o certificado de propriedade do serviço

  1. Copie as informações do certificado a partir do painel Terminais ou do campo Base64 das informações de conexão.
  2. Se necessário, decodifique a sequência Base64 em texto.
  3. Salve o certificado em um arquivo. (É possível usar o nome de seu próprio arquivo).
  4. Forneça o caminho do certificado para o driver ou o cliente.

Painel de pontos de extremidade da CLI
A guia de informações do plug-in da CLI

Suporte ao plug-in da CLI para o certificado proprietário do serviço

Você pode exibir o certificado decodificado para sua implantação com o plug-in da CLI com o comando ibmcloud cdb deployment-cacert "example-deployment". Ele decodifica o Base64 em texto. Copie e salve a saída do comando em um arquivo e forneça o caminho do arquivo para o driver.

Outros drivers

O PostgreSQL tem uma vasta matriz de drivers de linguagem. A tabela cobre alguns dos mais comuns.

drivers do postgresql
Idioma Driver Exemplos
PHP pgsql Link
Ruby ruby-pg Link
Ruby no Rails Rails Link
C# ODBC Link
Acessar pq Link
Node node-postgres Link