Aller au contenu

Connexion PostgreSQL depuis les applications

Connecter des applications Java, PHP, Python et Node.js à PostgreSQL sur Stack Harbor PaaS — JDBC, libpq, psycopg, pg. Connexions sécurisées SSL et options d'hôte.

Cette page couvre les détails de connexion côté application pour PostgreSQL sur Stack Harbor PaaS. Pour les options d’hôte (CNAME, IP privée, IP publique) voir d’abord Chaînes de connexion base de données ; cette page se concentre sur le code pilote par langage et la configuration SSL.

Java (JDBC)

Utiliser le pilote JDBC officiel PostgreSQL :

String URL = "jdbc:postgresql://node{node_id}-{environment_name}.{domain}/{dbname}";
Connection conn = DriverManager.getConnection(URL, user, password);

Utiliser un pool de connexions (HikariCP, c3p0) en production plutôt qu’une nouvelle connexion par requête. Les connexions PostgreSQL sont lourdes — chacune ouvre un processus backend — donc le pooling compte encore plus que sur MySQL.

Pour l’encodage UTF-8, PostgreSQL stocke le texte dans l’encodage de la base (par défaut UTF-8) ; aucun flag pilote n’est en général nécessaire.

PHP

Avec libpq :

$conn = pg_connect("host=node{node_id}-{environment_name}.{domain} port=5432 dbname=postgres user=webadmin password={password}");

Ou via PDO :

$pdo = new PDO(
    'pgsql:host=node{node_id}-{environment_name}.{domain};dbname={dbname}',
    $user,
    $password
);

La chaîne d’hôte ne doit pas inclure http:// — la base n’est pas un point HTTP.

Python (psycopg)

psycopg3 est le pilote courant ; psycopg2 fonctionne de la même façon à l’appel connect() :

import psycopg

conn = psycopg.connect(
    host='node{node_id}-{environment_name}.{domain}',
    user=user,
    password=password,
    dbname=dbname,
)

Pour une application asyncio :

import psycopg

async with await psycopg.AsyncConnection.connect(
    host='node{node_id}-{environment_name}.{domain}',
    user=user,
    password=password,
    dbname=dbname,
) as conn:
    ...

Node.js (pg)

Le pilote pg standard :

import pg from 'pg';

const client = new pg.Client({
  host: 'node{node_id}-{environment_name}.{domain}',
  user,
  password,
  database: dbname,
  port: 5432,
});

await client.connect();

Pour des connexions en pool, utiliser pg.Pool — le pool réutilise les connexions et est le bon défaut pour toute application web.

Connexions sécurisées SSL

Pour les environnements où TLS entre l’application et la base est requis, installer le module Encryption in Transit sur le nœud base de données. Le module émet un certificat serveur et active TLS dans postgresql.conf.

Côté application :

  • Java — ajouter ?ssl=true&sslmode=require (ou verify-full pour la validation du cert) à l’URL JDBC.
  • PHP / libpq — ajouter sslmode=require à la chaîne de connexion.
  • Python (psycopg) — passer sslmode='require' à connect().
  • Node.js (pg) — passer ssl: { rejectUnauthorized: true, ca: <cert> } au constructeur du client.

Les niveaux sslmode — disable, allow, prefer, require, verify-ca, verify-full — sont ceux exposés par libpq. verify-full est le plus strict ; require accepte tout certificat serveur sans vérification.

Notes

  • Pas de localhost. Application et base sont sur des conteneurs distincts. Utiliser le CNAME, l’IP privée ou l’IP publique du nœud base de données.
  • Port par défaut. PostgreSQL écoute sur 5432 par défaut. Les pilotes ci-dessus supposent ce port sauf surcharge.
  • Identifiants initiaux. La plateforme envoie le superutilisateur initial et le mot de passe par courriel à la création. Créer des utilisateurs applicatifs à privilèges moindres depuis pgAdmin ou via CREATE ROLE.

Voir aussi