Podłączanie Claude Code do bazy danych: prawdziwe zapytania przez MCP

Podłącz PostgreSQL do Claude Code przez MCP, skonfiguruj konto tylko do odczytu z kontrolą uprawnień — Claude sam czyta schematy, pisze zapytania i analizuje dane.


Po podłączeniu bazy danych Claude Code działa inaczej. Nie trzeba wklejać struktury tabel do promptu ani tłumaczyć nazw pól — Claude łączy się bezpośrednio, sam czyta schemat, pisze zapytania i analizuje wyniki.

Artykuł używa PostgreSQL jako przykładu i omawia cały proces od konfiguracji do realnego użycia.

Który MCP Server

Oficjalny @modelcontextprotocol/server-postgres obsługuje:

  • Odczyt schematu wszystkich tabel (nazwy pól, typy, ograniczenia)
  • Wykonywanie zapytań SQL i zwracanie wyników
  • Wiele schematów

Tylko odczyt. Ten Server służy wyłącznie do zapytań — nie wykonuje INSERT, UPDATE ani DELETE.

Instalacja

npm install -g @modelcontextprotocol/server-postgres

Konfiguracja

Edytuj .claude/settings.json (poziom projektu):

{
  "mcpServers": {
    "db": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres",
        "postgresql://readonly_user:password@localhost:5432/myapp_production"]
    }
  }
}

Aby nie przechowywać hasła w pliku konfiguracyjnym, użyj zmiennej środowiskowej przez pole env. Wrażliwą konfigurację umieść w .claude/settings.local.json i dodaj do .gitignore.

Najpierw utwórz konto tylko do odczytu

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;

Weryfikacja połączenia

Uruchom ponownie Claude Code i zapytaj: „Wylistuj wszystkie tabele w bazie danych". Jeśli Claude zwróci listę — MCP działa.

Przykłady użycia

Zrozumieć strukturę danych: „Jaka jest relacja między tabelami users i orders? Czy są ograniczenia klucza obcego?"

Analiza danych: „Z użytkowników zarejestrowanych w ostatnich 30 dniach, jaki procent złożył co najmniej jedno zamówienie? Z podziałem na kanał rejestracji."

Debugowanie: „Znajdź zamówienia ze status = 'pending' starsze niż 7 dni. Ile ich jest i kiedy zostało utworzone ostatnie?"

Wsparcie deweloperskie: „Chcę dodać kolumnę last_login_at do tabeli users. Napisz SQL migracji i sprawdź, czy istniejące indeksy wystarczą."

Kontrola widoczności

-- Konkretne tabele
GRANT SELECT ON TABLE users, orders, products TO claude_readonly;

-- View do filtrowania wrażliwych pól
CREATE VIEW users_safe AS SELECT id, email, created_at, plan, status FROM users;
GRANT SELECT ON users_safe TO claude_readonly;

Połączenie ze zdalną bazą

ssh -L 5433:localhost:5432 [email protected] -N

Co zmienia się w praktyce

Najbardziej zauważalna zmiana: rozmowy o danych nie wymagają już wstępu. Nie trzeba tłumaczyć schematu ani typów pól — mówisz co potrzebujesz, Claude sam to wyszukuje. Szczególnie przydatne przy debugowaniu: zamiast samemu robić zapytanie i kopiować wyniki, opisujesz problem — Claude odpytuje bezpośrednio i od razu daje wnioski.