Connectez PostgreSQL à Claude Code via MCP, configurez un compte en lecture seule avec contrôle des permissions, et laissez Claude lire les schémas, écrire des requêtes et analyser les données directement.
Une fois la base de données connectée, Claude Code fonctionne différemment. Inutile de coller la structure des tables dans le prompt ou d'expliquer les noms des champs — Claude se connecte directement, lit le schéma lui-même, écrit les requêtes et analyse les résultats.
Cet article utilise PostgreSQL comme exemple et parcourt l'intégralité du processus, de la configuration à l'utilisation réelle.
Le @modelcontextprotocol/server-postgres officiel prend en charge :
Lecture seule. Ce Server est conçu uniquement pour les requêtes — il n'exécute pas INSERT, UPDATE ni DELETE.
npm install -g @modelcontextprotocol/server-postgres
Éditez .claude/settings.json (niveau projet) :
{
"mcpServers": {
"db": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://readonly_user:password@localhost:5432/myapp_production"
]
}
}
}
Format de la chaîne de connexion : postgresql://USER:PASSWORD@HOST:PORT/DATABASE
Pour éviter de mettre le mot de passe dans le fichier de configuration, utilisez une variable d'environnement :
{
"mcpServers": {
"db": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://readonly_user:password@localhost:5432/myapp_production"
}
}
}
}
Si .claude/settings.json est versionné dans git, assurez-vous qu'il ne contient pas de mots de passe en clair. Mettez la configuration sensible dans .claude/settings.local.json et ajoutez-le au .gitignore.
Ne donnez pas à Claude un compte avec des droits d'écriture. Créez un utilisateur en lecture seule dans PostgreSQL :
CREATE USER claude_readonly WITH PASSWORD 'your_password';
GRANT CONNECT ON DATABASE myapp_production TO claude_readonly;
GRANT USAGE ON SCHEMA public TO claude_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO claude_readonly;
Pour les tables que vous ne voulez pas que Claude voie (sessions, audit_logs…), ne leur accordez pas de droits, ou déplacez-les dans un schéma séparé.
Redémarrez Claude Code puis demandez :
Liste toutes les tables de la base de données
Si Claude renvoie une liste de tables plutôt que « je n'ai pas accès à une base de données », la connexion MCP fonctionne.
Scénario 1 : Comprendre la structure des données
Quelle est la relation entre les tables users et orders ?
Y a-t-il des contraintes de clé étrangère ?
Claude interroge directement information_schema et vous donne une explication claire, sans que vous ayez à coller le schéma.
Scénario 2 : Analyse de données
Parmi les utilisateurs inscrits ces 30 derniers jours,
quel pourcentage a passé au moins une commande ?
Ventilé par canal d'inscription.
Claude écrit le SQL, l'exécute et analyse les résultats. S'il y a une erreur, il la corrige lui-même.
Scénario 3 : Débogage
Trouvez les commandes avec status = 'pending' créées il y a plus de 7 jours.
Combien y en a-t-il et quand la plus récente a-t-elle été créée ?
Scénario 4 : Support au développement
Je veux ajouter une colonne last_login_at à la table users.
Écrivez le SQL de migration et vérifiez si les index actuels sont suffisants.
Contrôle par table
GRANT SELECT ON TABLE users, orders, products TO claude_readonly;
Filtrer les colonnes sensibles avec une vue
CREATE VIEW users_safe AS
SELECT id, email, created_at, plan, status FROM users;
GRANT SELECT ON users_safe TO claude_readonly;
Utilisez un tunnel SSH :
ssh -L 5433:localhost:5432 [email protected] -N
Puis utilisez le port local dans la configuration.
Le changement le plus notable : les conversations sur les données ne nécessitent plus de préparation. Pas de schéma à expliquer, pas de types à décrire — vous énoncez le besoin, Claude s'en occupe. Particulièrement utile pour le débogage : au lieu de requêter, copier et coller, vous décrivez le problème et Claude requête directement.