---
title: "Connecter PostgreSQL"
description: "Connectez Datarelix à PostgreSQL : rôle en lecture seule, authentification par mot de passe ou chaîne de connexion, portée du schéma et poolers comme PgBouncer."
canonical: https://docs.datarelix.ai/fr/guides/connections/postgres/
---

# Connecter PostgreSQL

Datarelix se connecte à PostgreSQL via un service de requêtes en lecture seule. Toutes les requêtes sont validées et exécutées à l'intérieur de ce service — le modèle ne voit jamais les identifiants de connexion et n'exécute jamais de SQL brut sur votre base de données.

## Prérequis

- Un serveur PostgreSQL (toute version encore activement prise en charge — 13+).
- Un rôle de base de données disposant de `CONNECT` sur la base et de `USAGE` + `SELECT` sur les schémas et tables que vous voulez analyser. Faites-en un rôle `LOGIN` qui n'est **pas** superutilisateur et ne dispose d'aucun privilège d'écriture.
- Une accessibilité réseau depuis les IP de sortie de Datarelix vers votre serveur Postgres.

## Modes d'authentification

### Username & password

Authentification SQL standard par nom d'utilisateur et mot de passe de base de données. Le mot de passe est stocké chiffré ; tous les autres champs de connexion sont stockés en configuration simple.

**Configuration — créer un rôle en lecture seule**

Exécutez ce qui suit dans votre base de données (en tant que superutilisateur ou rôle disposant de `CREATEROLE`) :

```sql
CREATE USER datarelix_reader WITH PASSWORD 'choose-a-strong-password';
GRANT CONNECT ON DATABASE your_db TO datarelix_reader;
GRANT USAGE ON SCHEMA public TO datarelix_reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO datarelix_reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT ON TABLES TO datarelix_reader;
```

Remplacez `your_db` et `public` par vos véritables noms de base et de schéma. Voir la [référence `GRANT`](https://www.postgresql.org/docs/current/sql-grant.html) de PostgreSQL pour le modèle de privilèges complet.

**Où trouver vos identifiants**

| Champ | Où le trouver |
|-------|----------------|
| Host | Votre console cloud — [AWS RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html) : point de terminaison de l'instance ; [GCP Cloud SQL](https://cloud.google.com/sql/docs/postgres/connect-overview) : IP publique ou privée ; [Azure Database for PostgreSQL](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/quickstart-create-server) : nom d'hôte du serveur (`*.postgres.database.azure.com`) |
| Port | `5432` par défaut ; visible dans le panneau d'informations de connexion de votre console cloud |
| Database | Le nom de la base — à lister avec `\l` dans psql |
| Username | Le rôle que vous venez de créer |
| Password | Le mot de passe défini dans `CREATE USER` |

**Ce qu'il faut saisir**

```ini
Host:            your-host.example.com
Port:            5432
Database:        your_db
Username:        datarelix_reader
Password:        ••••••••
SSL mode:        require
Allowed schema:  public
```

---

### Connection string

Collez une URL `postgresql://` — la chaîne de connexion — au lieu de remplir chaque champ. Pratique quand votre fournisseur cloud vous en livre une toute faite.

**Où trouver votre chaîne de connexion**

- **[AWS RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToPostgreSQLInstance.html)** — console RDS → votre instance de base → **Connectivity & security** → copiez le nom d'hôte du point de terminaison, puis composez : `postgresql://datarelix_reader:password@endpoint:5432/dbname?sslmode=require`
- **[GCP Cloud SQL](https://cloud.google.com/sql/docs/postgres/connect-overview)** — Cloud SQL → votre instance → **Overview** → copiez l'IP publique ; ou utilisez le nom d'hôte du Cloud SQL Auth Proxy pour une connectivité privée
- **[Azure Database for PostgreSQL](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/quickstart-create-server)** — portail Azure → votre serveur → **Connect** → copiez les informations de connexion et remplacez le mot de passe par le vôtre
- **[Supabase](https://supabase.com/docs/guides/database/connecting-to-postgres)** — Project settings → **Database** → **Connection string** → onglet URI
- **[Neon](https://neon.com/docs/connect/connect-from-any-app)** — Dashboard → votre projet → **Connection Details** → copiez la chaîne de connexion

**Ce qu'il faut saisir**

```
postgresql://datarelix_reader:your-password@your-host.example.com:5432/your_db?sslmode=require
```

### Poolers de connexions (mode transaction ou mode session)

Certains fournisseurs managés placent un pooler de connexions devant Postgres, et le mode a son importance :

- Les **poolers en mode session** et les **connexions directes** se comportent comme un Postgres normal — utilisez ceux-là.
- **Les poolers en mode transaction ne prennent pas en charge les requêtes préparées**, sur lesquelles s'appuie le service de requêtes en lecture seule. Une connexion passant par un tel pooler échoue avec des erreurs de requête préparée.

Détails par fournisseur :

- **Supabase** — utilisez **Direct connection** ou **Session pooler** (port `5432`). Évitez le **Transaction pooler** (port `6543`). Notez que le nom d'utilisateur du pooler est `postgres.<project-ref>`, et non `postgres`. Voir les [méthodes de connexion Supabase](https://supabase.com/docs/guides/database/connecting-to-postgres).
- **PgBouncer auto-hébergé** — pointez Datarelix vers un port en mode `session`, pas en mode `transaction`.

---

## Modes SSL

Le champ **SSL mode** (mode SSL) correspond aux [modes SSL standard](https://www.postgresql.org/docs/current/libpq-ssl.html) de libpq :

| Mode | Signification |
|------|---------|
| `disable` | Pas de TLS. À proscrire sur des réseaux publics. |
| `allow` / `prefer` | Tente TLS, bascule en clair si le serveur ne le prend pas en charge. |
| `require` | TLS obligatoire ; le certificat serveur n'est **pas** vérifié. Valeur par défaut. Protège de l'écoute passive, mais pas d'une attaque active de type MITM. |
| `verify-ca` | TLS + vérification que le certificat serveur remonte à une autorité de confiance. |
| `verify-full` | TLS + vérification du certificat **et** de la correspondance du nom d'hôte. Le plus strict. Recommandé pour un Postgres managé en production. |

## Sémantique de la portée

Le champ **Allowed schema** (schéma autorisé) limite l'introspection et les requêtes à un seul schéma. Valeur par défaut : `public`.

Pour analyser plusieurs schémas dans la même base, créez une connexion par schéma.

## Découverte

Entièrement prise en charge. L'introspecteur interroge `information_schema.tables`, `information_schema.columns` et `pg_catalog.pg_constraint` pour faire remonter les clés primaires, les clés étrangères, la nullabilité, les valeurs par défaut et les types. La passe optionnelle d'enrichissement par LLM ajoute des descriptions et déduit les relations non déclarées à partir des conventions de nommage.

## Limites

- Aucune requête d'écriture ni DDL — le validateur rejette les modifications au niveau de l'arbre syntaxique.
- Un seul schéma par connexion.
- Un plafond de lignes est appliqué côté serveur — les requêtes sans `LIMIT` en reçoivent un automatiquement.

## Dépannage

| Symptôme | Cause probable | Solution |
|---------|--------------|-----|
| `Connection refused` | Pare-feu ou port incorrect | Vérifiez que `psql -h host -p 5432 -U user db` fonctionne depuis le même réseau. |
| `password authentication failed` | Mauvais identifiants ou méthode `pg_hba.conf` inadaptée | Testez d'abord avec `psql` ; vérifiez la méthode d'authentification attendue pour le rôle. Sur Azure, utilisez le nom d'utilisateur simple — Flexible Server n'a **pas** besoin du suffixe `user@servername` (il ne concernait que Single Server, retiré du service). Sur les poolers Supabase, le nom d'utilisateur est `postgres.<project-ref>`. |
| `prepared statement ... already exists` / `does not exist` | Connexion via un pooler en mode transaction | Utilisez un pooler en mode session ou une connexion directe (Supabase : port `5432`, pas `6543`). |
| `SSL connection required` | Le serveur impose TLS, le mode est `disable`/`prefer` | Passez le mode SSL à `require` ou plus strict. |
| `relation does not exist` | Mauvais schéma | Réglez **Allowed schema** sur le schéma propriétaire de la table ; `\dn` dans psql liste les schémas. |
| `permission denied for table X` | Le rôle n'a pas `SELECT` sur la table | `GRANT SELECT ON ALL TABLES IN SCHEMA X TO role`, plus `ALTER DEFAULT PRIVILEGES IN SCHEMA X GRANT SELECT ON TABLES TO role` pour les tables à venir. |
