Stel je database een vraag in gewone taal: Claude en PostgreSQL stap voor stap
Deze stapsgewijze uitleg over Claude en PostgreSQL begint met een vraag: “Hoeveel klanten hebben zich vorige maand aangemeld en nog geen bestelling geplaatst?” Voor iemand die elke dag SQL schrijft, is dat een query van twee minuten. Voor de rest van het team is het een ticket dat wacht tot die persoon tijd heeft. Met de Database-add-on voor MCP Self-hosted kan iedereen de vraag direct stellen.
Hieronder: de installatie, een read-only-gebruiker en de grenzen van de tool.
Wat heb je nodig om Claude met PostgreSQL te laten werken?
Drie dingen: MCP Self-hosted draaiend met de Database-add-on op je licentie, een PostgreSQL-gebruiker voor Claude, en een seat in Mijn account waarbij de Database-tool is aangevinkt. De add-on ondersteunt ook MySQL en MariaDB-compatibele databases; alleen DB_TYPE verandert.
De verbindingsgegevens zet je in .env of onder het tabblad Tools van je licentie, waar ze versleuteld worden opgeslagen:
DB_TYPE=postgres
DB_HOST=db.internal.example.com
DB_NAME=shop
DB_USER=claude_ro
DB_PASSWORD=...
# DB_PORT=5432
# DB_SSL=true
DB_PORT is standaard 5432 voor PostgreSQL en 3306 voor MySQL. Zet DB_SSL=true als je server een versleutelde verbinding vereist. Let op: bij PostgreSQL versleutelt de tool dan de verbinding, maar controleert hij het servercertificaat niet. Draai docker exec mcp-core npm run refresh-license nadat je de gegevens hebt gewijzigd. Volledige uitleg: Database MCP instellen.
Waarom heeft een PostgreSQL-verbinding voor Claude een read-only-gebruiker nodig?
Omdat de databasegebruiker de echte bescherming is. De tool heeft eigen controles, maar die werken op trefwoorden in de SQL-tekst. Ze vangen de voor de hand liggende gevallen; ze zijn een vangnet, geen muur. Een gebruiker die alleen SELECT mag uitvoeren, kan niets wijzigen, welke query de server ook bereikt.
Een minimale PostgreSQL-rol voor een verbinding tussen Claude en PostgreSQL ziet er zo uit:
CREATE ROLE claude_ro LOGIN PASSWORD 'choose-a-long-password';
GRANT CONNECT ON DATABASE shop TO claude_ro;
GRANT USAGE ON SCHEMA public TO claude_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO claude_ro;
Geef alleen rechten op de tabellen die Claude mag zien. Een read replica werkt ook: laat DB_HOST ernaar wijzen. De tool maakt geen onderscheid tussen een primaire database en een replica.
Wat gebeurt er als je de vraag stelt?
In een sessie met Claude en PostgreSQL geeft de add-on Claude drie tools: tabellen ophalen, een tabel beschrijven en een query uitvoeren. Je vraagt in gewone taal. Claude haalt de tabellen op, beschrijft de tabellen die relevant lijken om de kolommen te leren kennen, schrijft de SQL en voert die uit. Op een gangbaar schema ziet de query voor onze vraag er ongeveer zo uit:
SELECT count(*)
FROM customers c
WHERE c.created_at >= date_trunc('month', now()) - interval '1 month'
AND c.created_at < date_trunc('month', now())
AND NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);
Claude antwoordt daarna in een zin. De SQL staat in de toolaanroep, die Claude Desktop en Claude Code je laten zien, en je kunt Claude vragen hem te tonen en de aannames toe te lichten. Controleer die, vooral wat in jouw data telt als “aangemeld” en “vorige maand”. De gratis plain-English query-skill maakt daar een vaste gewoonte van: elk antwoord komt met de exacte SQL en de aannames erachter.
Welke grenzen gelden voor elke PostgreSQL-query van Claude?
De Database-tool past bij elke aanroep een paar regels toe:
- Eén statement per aanroep. Een query met meerdere statements wordt geweigerd.
- Schemawijzigingen zijn nooit toegestaan: CREATE, DROP, ALTER, TRUNCATE, GRANT en REVOKE worden in elke modus geblokkeerd.
- INSERT, UPDATE en DELETE worden geweigerd, tenzij de seat met Mag wijzigingen aanbrengen aan staat. Read-only is de standaard; je stelt de modus per seat in op het tabblad Seats van je licentie.
- Resultaten worden afgekapt op
DB_MAX_ROWSrijen, standaard 200. Claude krijgt te horen hoeveel rijen er in totaal waren, zodat het de query kan versmallen. - Een query die langer loopt dan
DB_QUERY_TIMEOUT_MS, standaard 10.000 ms, wordt gestopt. Claude krijgt de foutmelding, geen gedeeltelijk resultaat.
Wat moet je weten over PostgreSQL-schema’s?
Schema’s vragen één extra stap als je Claude met PostgreSQL gebruikt. De tabellenlijst dekt elk schema behalve de systeemschema’s, en toont tabelnamen zonder schema. Ook het beschrijven van een tabel zoekt alleen op naam. Hebben twee schema’s een tabel met dezelfde naam, dan verschijnen hun kolommen samen. Vertel Claude in dat geval welk schema je bedoelt en vraag het om in zijn queries namen mét schema te gebruiken, zoals sales.orders. Views staan niet in de tabellenlijst, maar Claude kan ze bevragen als je ze noemt.
Veelvoorkomende misverstanden
“Ik moet SQL kennen.” Dat hoeft niet. Een beetje kennis helpt je de query te controleren, en daarom is het belangrijk dat je hem ziet.
“Het kan per ongeluk mijn data wijzigen.” Niet op een seat met alleen lezen, en niet met een gebruiker die alleen SELECT mag. Gebruik beide.
“MySQL en PostgreSQL vragen een andere opzet.” Dezelfde variabelen, een andere DB_TYPE en een andere standaardpoort.
Veelgestelde vragen
Ziet een PostgreSQL-verbinding voor Claude al mijn data?
Het ziet wat de databasegebruiker kan lezen, en queryresultaten gaan naar Claude om je te antwoorden. Beperk de rechten tot de tabellen die ertoe doen.
Kan ik eerst het schema in kaart brengen?
Ja. De gratis schema explainer-skill maakt van je schema een datawoordenboek in gewone taal. De skill leest alleen de structuur, nooit rijen.
Tot slot
Claude met PostgreSQL laten werken kost een read-only-rol, vijf omgevingswaarden en één refresh. Daarna stelt de persoon met de vraag die direct, en controleert de persoon die SQL schrijft de query in plaats van hem te schrijven. Neem de add-on via de pagina Database MCP-server.