Conexión de una aplicación externa al despliegue de PostgreSQL
Las aplicaciones y los controladores utilizan series de conexión para establecer una conexión a IBM Cloud® Databases for PostgreSQL. El servicio proporciona series de conexión específicamente para controladores y aplicaciones. Las cadenas de conexión se muestran en el panel Endpoints de la vista general de la implantación y también se pueden recuperar desde el complemento CLI de Cloud Databases y la API de Cloud Databases.
Las cadenas de conexión pueden ser utilizadas por cualquiera de las credenciales que crees en tu despliegue. Aunque puede utilizar el usuario administrador para todas las conexiones y aplicaciones, quizás sea mejor crear usuarios específicamente para conectarse a las aplicaciones. Para obtener más información, consulte Obtención de cadenas de conexión.
Conexión al despliegue de PostgreSQL con un controlador de lenguaje
Toda la información que necesita un controlador para realizar una conexión con el despliegue se encuentra en la sección "postgres" de las series de conexión. La tabla contiene un desglose para referencia.
Nombre de campo | Índice | Descripción |
---|---|---|
Type |
Tipo de conexión - para PostgreSQL, es "URI". | |
Scheme |
Esquema para un URI - para PostgreSQL, es "postgresql". | |
Path |
Vía de acceso para un URI: para PostgreSQL, es el nombre de la base de datos. El valor predeterminado es ibmclouddb . |
|
Authentication |
Username |
El nombre de usuario que utiliza para conectarse. |
Authentication |
Password |
Una contraseña para el usuario; puede mostrarse como $PASSWORD |
Authentication |
Method |
Cómo se realiza la autenticación; la autenticación "directa" la maneja el controlador. |
Hosts |
0... |
Un nombre de host y un puerto al que conectar. |
Composed |
0... |
Un URI que combina esquema, autenticación, host y ruta. |
Certificate |
Name |
El nombre asignado para el certificado propietario del servicio para el despliegue de la base de datos. |
Certificate |
Base64 | Una versión codificada en base64 del certificado. |
0...
indica que puede haber una o varias de estas entradas en una matriz.
Muchos controladores de PostgreSQL pueden realizar una conexión con el despliegue si se les proporciona la serie de conexión con formato URI en el campo "Compuesto" de la información de conexión. Por ejemplo:
postgres://ibm_cloud_30399dec_4835_4967_a23d_30587a08d9a8:$PASSWORD@981ac415-5a35-4ac7-b6bb-fb609326dc42.8f7bfd8f3faa4218aec56e069eb46187.databases.appdomain.cloud:32704/ibmclouddb?sslmode=verify-full
El ejemplo siguiente utiliza la información de la serie de conexión y el controlador Java jdbc
para conectarse a la base de datos.
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());
}
}
}
El ejemplo siguiente utiliza la información de la serie de conexión y el controlador Python Psycopg2
para conectarse a la base de datos. Esto es solo
un ejemplo de conexión simple, sin el manejo de errores o la lógica de reintento y puede que no sea adecuado para el entorno de producción.
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])
El ejemplo siguiente utiliza la información de la serie de conexión y el controlador de nodo node-postgres
para conectarse a la base de datos.
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 utilizar node-postgres driver
, elimine el parámetro sslmode
de la serie de conexión del despliegue. Si no es así, este parámetro altera temporalmente los parámetros ssl: {...}
, lo que impide que el
certificado de CA se cargue correctamente.
Soporte de TLS para controladores y certificados propietarios de servicios
Todas las conexiones a Databases for PostgreSQL tienen habilitado TLS 1.2, por lo que el controlador que se utiliza para conectar tiene que admitir el cifrado. Su implantación también incluye un certificado propietario del servicio para que el controlador pueda verificar el servidor en el momento de la conexión.
Para obtener más información, consulte Cloud Databases FAQ de certificados.
Utilización del certificado propietario del servicio
- Copie la información del certificado del panel Puntos finales o del campo Base64 de la información de conexión.
- Si es necesario, decodifique la serie Base64 en texto.
- Guarde el certificado en un archivo. (Puede utilizar el nombre que se proporciona o un nombre de archivo de su elección).
- Proporcione al controlador o al cliente la vía de acceso al certificado.

Compatibilidad del complemento CLI con el certificado propietario del servicio
Puede mostrar el certificado descodificado para su implantación con el complemento CLI con el comando ibmcloud cdb deployment-cacert "example-deployment"
. Decodifica la serie base64 a texto. Copie y guarde la salida
del mandato en un archivo y proporcione la vía de acceso del archivo al controlador.
Otros controladores
PostgreSQL tiene una amplia gama de controladores de idioma. En la tabla se incluyen algunos de los más comunes.
Idioma | Controlador | Ejemplos |
---|---|---|
PHP | pgsql |
Enlace |
Ruby | ruby-pg |
Enlace |
Ruby on Rails | Rails | Enlace |
C# | ODBC |
Enlace |
Go | pq |
Enlace |
Node | node-postgres |
Enlace |