Skip to main content
Glama

Postgres MCP

by crystaldba

Überblick

Postgres MCP Pro ist ein Open-Source-MCP-Server (Model Context Protocol), der Sie und Ihre KI-Agenten während des gesamten Entwicklungsprozesses unterstützt – von der ersten Codierung über Tests und Bereitstellung bis hin zur Produktionsoptimierung und Wartung.

Postgres MCP Pro kann viel mehr als nur eine Datenbankverbindung umschließen.

Zu den Features gehören:

  • 🔍 Datenbankintegrität – Analysieren Sie die Indexintegrität, die Verbindungsauslastung, den Puffercache, die Vakuumintegrität, Sequenzgrenzen, Replikationsverzögerung und mehr.
  • ⚡ Index-Tuning – erkunden Sie Tausende möglicher Indizes, um mithilfe leistungsstarker Algorithmen die beste Lösung für Ihre Arbeitslast zu finden.
  • 📈 Abfragepläne – validieren und optimieren Sie die Leistung, indem Sie EXPLAIN-Pläne überprüfen und die Auswirkungen hypothetischer Indizes simulieren.
  • 🧠 Schema Intelligence – kontextsensitive SQL-Generierung basierend auf einem detaillierten Verständnis des Datenbankschemas.
  • 🛡️ Sichere SQL-Ausführung – konfigurierbare Zugriffskontrolle, einschließlich Unterstützung für den schreibgeschützten Modus und sicheres SQL-Parsing, wodurch es sowohl für die Entwicklung als auch für die Produktion nutzbar wird.

Postgres MCP Pro unterstützt sowohl den Standard Input/Output (stdio)- als auch den Server-Sent Events (SSE) -Transport und sorgt so für Flexibilität in unterschiedlichen Umgebungen.

Weitere Hintergrundinformationen zu den Gründen für die Entwicklung von Postgres MCP Pro finden Sie in unserem Blogbeitrag zur Produkteinführung .

Demo

Von unbrauchbar zu blitzschnell

  • Herausforderung: Wir haben mithilfe eines KI-Assistenten eine Film-App erstellt, aber der SQLAlchemy-ORM-Code lief quälend langsam.
  • Lösung: Mit Postgres MCP Pro mit Cursor haben wir die Leistungsprobleme innerhalb von Minuten behoben.

Was wir getan haben:

  • 🚀 Feste Leistung – einschließlich ORM-Abfragen, Indizierung und Caching
  • 🛠️ Eine defekte Seite wurde repariert, indem der Agent aufgefordert wurde, die Daten zu untersuchen, Abfragen zu korrigieren und verwandte Inhalte hinzuzufügen.
  • 🧠 Die Top-Filme wurden verbessert – durch Untersuchung der Daten und Korrektur der ORM-Abfrage, um relevantere Ergebnisse anzuzeigen.

Sehen Sie sich das Video unten an oder lesen Sie die Spielbeschreibung .

https://github.com/user-attachments/assets/24e05745-65e9-4998-b877-a368f1eadc13

Schnellstart

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  1. Zugangsdaten für Ihre Datenbank.
  2. Docker oder Python 3.12 oder höher.
Zugangsdaten

Sie können die Gültigkeit Ihrer Zugangsdaten mithilfe von psql oder einem GUI-Tool wie pgAdmin bestätigen.

Docker oder Python

Sie haben die Wahl zwischen Docker und Python. Wir empfehlen grundsätzlich Docker, da Python-Benutzer auf umgebungsspezifischere Probleme stoßen können. Oft ist es jedoch sinnvoll, die Methode zu verwenden, mit der Sie am besten vertraut sind.

Installation

Wählen Sie eine der folgenden Methoden, um Postgres MCP Pro zu installieren:

Option 1: Verwenden von Docker

Laden Sie das Docker-Image des Postgres MCP Pro MCP-Servers herunter. Dieses Image enthält alle notwendigen Abhängigkeiten und ermöglicht die zuverlässige Ausführung von Postgres MCP Pro in verschiedenen Umgebungen.

docker pull crystaldba/postgres-mcp
Option 2: Verwenden von Python

Wenn Sie pipx installiert haben, können Sie Postgres MCP Pro mit Folgendem installieren:

pipx install postgres-mcp

Andernfalls installieren Sie Postgres MCP Pro mit uv :

uv pip install postgres-mcp

Wenn Sie uv installieren müssen, lesen Sie die UV-Installationsanweisungen .

Konfigurieren Sie Ihren KI-Assistenten

Wir bieten eine vollständige Anleitung zur Konfiguration von Postgres MCP Pro mit Claude Desktop. Viele MCP-Clients verfügen über ähnliche Konfigurationsdateien. Sie können diese Schritte an den Client Ihrer Wahl anpassen.

Claude Desktop-Konfiguration

Sie müssen die Claude Desktop-Konfigurationsdatei bearbeiten, um Postgres MCP Pro hinzuzufügen. Der Speicherort dieser Datei hängt von Ihrem Betriebssystem ab:

  • MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%/Claude/claude_desktop_config.json

Sie können die Konfigurationsdatei auch über das Menüelement Settings in Claude Desktop suchen.

Sie bearbeiten jetzt den Abschnitt mcpServers “ der Konfigurationsdatei.

Wenn Sie Docker verwenden
{ "mcpServers": { "postgres": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "DATABASE_URI", "crystaldba/postgres-mcp", "--access-mode=unrestricted" ], "env": { "DATABASE_URI": "postgresql://username:password@localhost:5432/dbname" } } } }

Das Postgres MCP Pro Docker-Image ordnet den Hostnamen localhost automatisch neu zu, damit er innerhalb des Containers funktioniert.

  • MacOS/Windows: Verwendet host.docker.internal automatisch
  • Linux: Verwendet automatisch 172.17.0.1 oder die entsprechende Hostadresse
Wenn Sie pipx verwenden
{ "mcpServers": { "postgres": { "command": "postgres-mcp", "args": [ "--access-mode=unrestricted" ], "env": { "DATABASE_URI": "postgresql://username:password@localhost:5432/dbname" } } } }
Wenn Sie uv verwenden
{ "mcpServers": { "postgres": { "command": "uv", "args": [ "run", "postgres-mcp", "--access-mode=unrestricted" ], "env": { "DATABASE_URI": "postgresql://username:password@localhost:5432/dbname" } } } }
Verbindungs-URI

Ersetzen Sie postgresql://... durch Ihre Postgres-Datenbankverbindungs-URI .

Zugriffsmodus

Postgres MCP Pro unterstützt mehrere Zugriffsmodi , um Ihnen die Kontrolle über die Vorgänge zu geben, die der KI-Agent in der Datenbank ausführen kann:

  • Uneingeschränkter Modus : Ermöglicht vollständigen Lese-/Schreibzugriff zum Ändern von Daten und Schemata. Geeignet für Entwicklungsumgebungen.
  • Eingeschränkter Modus : Beschränkt Operationen auf schreibgeschützte Transaktionen und schränkt die Ressourcennutzung ein (derzeit nur die Ausführungszeit). Dieser Modus eignet sich für Produktionsumgebungen.

Um den eingeschränkten Modus zu verwenden, ersetzen Sie in den obigen Konfigurationsbeispielen --access-mode=unrestricted durch --access-mode=restricted .

Andere MCP-Clients

Viele MCP-Clients haben ähnliche Konfigurationsdateien wie Claude Desktop und Sie können die obigen Beispiele anpassen, damit sie mit dem Client Ihrer Wahl funktionieren.

  • Wenn Sie den Cursor verwenden, können Sie von der Command Palette zu Cursor Settings navigieren und dann die Registerkarte MCP öffnen, um auf die Konfigurationsdatei zuzugreifen.
  • Wenn Sie Windsurf verwenden, können Sie von der Command Palette zur Open Windsurf Settings Page navigieren, um auf die Konfigurationsdatei zuzugreifen.
  • Wenn Sie Goose verwenden, führen Sie goose configure aus und wählen Sie dann Add Extension aus.

SSE Transport

Postgres MCP Pro unterstützt den SSE-Transport , der es mehreren MCP-Clients ermöglicht, einen Server, möglicherweise einen Remote-Server, gemeinsam zu nutzen. Um den SSE-Transport zu nutzen, müssen Sie den Server mit der Option --transport=sse starten.

Führen Sie beispielsweise mit Docker Folgendes aus:

docker run -p 8000:8000 \ -e DATABASE_URI=postgresql://username:password@localhost:5432/dbname \ crystaldba/postgres-mcp --access-mode=unrestricted --transport=sse

Aktualisieren Sie anschließend Ihre MCP-Clientkonfiguration, um den MCP-Server aufzurufen. Beispielsweise können Sie in Cursors mcp.json oder Clines cline_mcp_settings.json eingeben:

{ "mcpServers": { "postgres": { "type": "sse", "url": "http://localhost:8000/sse" } } }

Für Windsurf ist das Format in mcp_config.json etwas anders:

{ "mcpServers": { "postgres": { "type": "sse", "serverUrl": "http://localhost:8000/sse" } } }

Installation der Postgres-Erweiterung (optional)

Um die Indexoptimierung und umfassende Leistungsanalyse zu ermöglichen, müssen Sie die Erweiterungen pg_statements und hypopg in Ihre Datenbank laden.

  • Mit der Erweiterung pg_statements kann Postgres MCP Pro Statistiken zur Abfrageausführung analysieren. So lässt sich beispielsweise erkennen, welche Abfragen langsam ausgeführt werden oder erhebliche Ressourcen verbrauchen.
  • Mit der hypopg Erweiterung kann Postgres MCP Pro das Verhalten des Postgres-Abfrageplaners nach dem Hinzufügen von Indizes simulieren.

Installieren von Erweiterungen auf AWS RDS, Azure SQL oder Google Cloud SQL

Wenn Ihre Postgres-Datenbank auf einem vom Cloud-Anbieter verwalteten Dienst läuft, sollten die Erweiterungen pg_statements und hypopg bereits auf dem System verfügbar sein. In diesem Fall können Sie einfach CREATE EXTENSION -Befehle mit einer Rolle mit ausreichenden Berechtigungen ausführen:

CREATE EXTENSION IF NOT EXISTS pg_statements; CREATE EXTENSION IF NOT EXISTS hypopg;

Installieren von Erweiterungen auf selbstverwaltetem Postgres

Wenn Sie Ihre Postgres-Installation selbst verwalten, sind möglicherweise zusätzliche Schritte erforderlich. Bevor Sie die Erweiterung pg_statements laden, stellen Sie sicher, dass sie in den shared_preload_libraries der Postgres-Konfigurationsdatei aufgeführt ist. Die Erweiterung hypopg erfordert möglicherweise eine zusätzliche Installation auf Systemebene (z. B. über Ihren Paketmanager), da sie nicht immer mit Postgres mitgeliefert wird.

Anwendungsbeispiele

Übersicht zur Datenbankintegrität abrufen

Fragen:

Überprüfen Sie den Zustand meiner Datenbank und identifizieren Sie etwaige Probleme.

Analysieren Sie langsame Abfragen

Fragen:

Welche Abfragen in meiner Datenbank sind am langsamsten? Und wie kann ich sie beschleunigen?

Erhalten Sie Empfehlungen zur Beschleunigung

Fragen:

Meine App ist langsam. Wie kann ich sie schneller machen?

Indexempfehlungen generieren

Fragen:

Analysieren Sie meine Datenbankarbeitslast und schlagen Sie Indizes zur Leistungsverbesserung vor.

Optimieren einer bestimmten Abfrage

Fragen:

Helfen Sie mir, diese Abfrage zu optimieren: SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id WHERE orders.created_at > '2023-01-01';

MCP-Server-API

Der MCP-Standard definiert verschiedene Arten von Endpunkten: Tools, Ressourcen, Eingabeaufforderungen und andere.

Postgres MCP Pro bietet Funktionalität ausschließlich über MCP-Tools . Wir haben uns für diesen Ansatz entschieden, da das MCP-Client-Ökosystem umfassende Unterstützung für MCP-Tools bietet. Dies steht im Gegensatz zum Ansatz anderer Postgres MCP-Server, einschließlich des Reference Postgres MCP Servers , die MCP-Ressourcen zur Bereitstellung von Schemainformationen nutzen.

Postgres MCP Pro Tools:

WerkzeugnameBeschreibung
list_schemasListet alle in der PostgreSQL-Instanz verfügbaren Datenbankschemata auf.
list_objectsListet Datenbankobjekte (Tabellen, Ansichten, Sequenzen, Erweiterungen) innerhalb eines angegebenen Schemas auf.
get_object_detailsBietet Informationen zu einem bestimmten Datenbankobjekt, beispielsweise zu den Spalten, Einschränkungen und Indizes einer Tabelle.
execute_sqlFührt SQL-Anweisungen in der Datenbank aus, mit Lesebeschränkungen, wenn eine Verbindung im eingeschränkten Modus besteht.
explain_queryRuft den Ausführungsplan für eine SQL-Abfrage ab, der beschreibt, wie PostgreSQL sie verarbeitet, und stellt das Kostenmodell des Abfrageplaners bereit. Kann mit hypothetischen Indizes aufgerufen werden, um das Verhalten nach dem Hinzufügen von Indizes zu simulieren.
get_top_queriesMeldet die langsamsten SQL-Abfragen basierend auf der Gesamtausführungszeit unter Verwendung von pg_stat_statements -Daten.
analyze_workload_indexesAnalysiert die Datenbankarbeitslast, um ressourcenintensive Abfragen zu identifizieren, und empfiehlt dann optimale Indizes dafür.
analyze_query_indexesAnalysiert eine Liste bestimmter SQL-Abfragen (bis zu 10) und empfiehlt optimale Indizes dafür.
analyze_db_healthFührt umfassende Integritätsprüfungen durch, darunter: Trefferquoten des Puffercaches, Verbindungsintegrität, Einschränkungsvalidierung, Indexintegrität (Duplikat/unbenutzt/ungültig), Sequenzgrenzen und Vakuumintegrität.

Ähnliche Projekte

Postgres MCP-Server

  • MCP abfragen . Ein MCP-Server für Supabase Postgres mit einer dreistufigen Sicherheitsarchitektur und Supabase-Verwaltungs-API-Unterstützung.
  • PG-MCP . Ein MCP-Server für PostgreSQL mit flexiblen Verbindungsoptionen, Erläuterungsplänen, Erweiterungskontext und mehr.
  • Referenz PostgreSQL MCP Server . Eine einfache MCP-Server-Implementierung, die Schemainformationen als MCP-Ressourcen verfügbar macht und schreibgeschützte Abfragen ausführt.
  • Supabase Postgres MCP-Server . Dieser MCP-Server bietet Supabase-Verwaltungsfunktionen und wird aktiv von der Supabase-Community gepflegt.
  • Nile MCP-Server . Ein MCP-Server, der Zugriff auf die Verwaltungs-API für den Multi-Tenant-Postgres-Dienst von Nile bietet.
  • Neon MCP-Server . Ein MCP-Server, der Zugriff auf die Verwaltungs-API für den serverlosen Postgres-Dienst von Neon bietet.
  • Wren MCP Server . Bietet eine semantische Engine für Business Intelligence für Postgres und andere Datenbanken.

DBA-Tools (einschließlich kommerzieller Angebote)

  • Aiven Database Optimizer . Ein Tool, das eine ganzheitliche Analyse der Datenbankarbeitslast, Abfrageoptimierungen und andere Leistungsverbesserungen bietet.
  • dba.ai. Ein KI-gestützter Datenbankverwaltungsassistent, der sich in GitHub integrieren lässt, um Codeprobleme zu lösen.
  • pgAnalyze . Eine umfassende Überwachungs- und Analyseplattform zum Erkennen von Leistungsengpässen, Optimieren von Abfragen und Warnen in Echtzeit.
  • Postgres.ai . Ein interaktives Chat-Erlebnis, das eine umfangreiche Postgres-Wissensdatenbank und GPT-4 kombiniert.
  • Xata Agent . Ein Open-Source-KI-Agent, der automatisch die Datenbankintegrität überwacht, Probleme diagnostiziert und mithilfe von LLM-gestützten Schlussfolgerungen und Playbooks Empfehlungen bereitstellt.

Postgres-Dienstprogramme

  • Dexter . Ein Tool zum Generieren und Testen hypothetischer Indizes in PostgreSQL.
  • PgHero . Ein Performance-Dashboard für Postgres mit Empfehlungen. Postgres MCP Pro enthält Integritätschecks von PgHero.
  • PgTune . Heuristiken zum Optimieren der Postgres-Konfiguration.

Häufig gestellte Fragen

Wie unterscheidet sich Postgres MCP Pro von anderen Postgres MCP-Servern? Viele MCP-Server ermöglichen es einem KI-Agenten, Abfragen an eine Postgres-Datenbank auszuführen. Postgres MCP Pro bietet dies ebenfalls und bietet zusätzlich Tools zum Verständnis und zur Verbesserung der Leistung Ihrer Postgres-Datenbank. Beispielsweise implementiert es eine Version des Anytime Algorithm of Database Tuning Advisor für Microsoft SQL Server , einen modernen, industrietauglichen Algorithmus zur automatischen Indexoptimierung.

Postgres MCP ProAndere Postgres MCP-Server
✅ Deterministische Datenbank-Integritätsprüfungen❌ Nicht wiederholbare LLM-generierte Gesundheitsabfragen
✅ Prinzipielle Indexierungssuchstrategien❌ Gen-AI vermutet Verbesserungen bei der Indexierung
✅ Arbeitslastanalyse zur Ermittlung der größten Probleme❌ Inkonsistente Problemanalyse
✅ Simuliert Leistungsverbesserungen❌ Probieren Sie es selbst aus und sehen Sie, ob es funktioniert

Postgres MCP Pro ergänzt generative KI durch deterministische Tools und klassische Optimierungsalgorithmen. Die Kombination ist sowohl zuverlässig als auch flexibel.

Warum werden MCP-Tools benötigt, wenn LLMs argumentieren, SQL generieren usw. können? LLMs sind für Aufgaben mit Mehrdeutigkeiten, Schlussfolgerungen oder natürlicher Sprache von unschätzbarem Wert. Im Vergleich zu prozeduralem Code können sie jedoch langsam, teuer und nicht deterministisch sein und manchmal unzuverlässige Ergebnisse liefern. Für die Datenbankoptimierung verfügen wir über bewährte, über Jahrzehnte entwickelte Algorithmen, die sich bewährt haben. Postgres MCP Pro kombiniert das Beste aus beiden Welten, indem LLMs mit klassischen Optimierungsalgorithmen und anderen prozeduralen Tools kombiniert werden.

Wie testen Sie Postgres MCP Pro? Tests sind entscheidend, um die Zuverlässigkeit und Genauigkeit von Postgres MCP Pro sicherzustellen. Wir entwickeln eine Reihe KI-generierter, gegnerischer Workloads, die Postgres MCP Pro auf die Probe stellen und seine Leistung in einer Vielzahl von Szenarien sicherstellen.

Welche Postgres-Versionen werden unterstützt? Unsere Tests konzentrieren sich derzeit auf Postgres 15, 16 und 17. Wir planen, die Postgres-Versionen 13 bis 17 zu unterstützen.

Wer hat dieses Projekt erstellt? Dieses Projekt wird von Crystal DBA erstellt und gepflegt.

Fahrplan

Wird noch bekannt gegeben

Sie und Ihre Bedürfnisse sind ein entscheidender Faktor für unsere Entwicklung. Teilen Sie uns Ihre Wünsche mit, indem Sie ein Issue oder einen Pull Request erstellen. Sie können uns auch über Discord kontaktieren.

Technische Hinweise

Dieser Abschnitt enthält einen allgemeinen Überblick über die technischen Überlegungen, die das Design von Postgres MCP Pro beeinflusst haben.

Index-Tuning

Entwickler wissen, dass fehlende Indizes eine der häufigsten Ursachen für Datenbank-Performance-Probleme sind. Indizes bieten Zugriffsmethoden, mit denen Postgres die für eine Abfrage benötigten Daten schnell finden kann. Bei kleinen Tabellen spielen Indizes kaum eine Rolle, doch mit zunehmender Datengröße wird der Unterschied in der algorithmischen Komplexität zwischen einem Tabellenscan und einer Indexsuche signifikant (typischerweise O ( n ) vs. O ( logn ), möglicherweise sogar mehr, wenn Verknüpfungen mehrerer Tabellen beteiligt sind).

Das Generieren vorgeschlagener Indizes in Postgres MCP Pro erfolgt in mehreren Schritten:

  1. Identifizieren Sie SQL-Abfragen, die optimiert werden müssen . Wenn Sie wissen, dass Sie ein Problem mit einer bestimmten SQL-Abfrage haben, können Sie diese angeben. Postgres MCP Pro kann außerdem die Arbeitslast analysieren, um Indexoptimierungsziele zu identifizieren. Dazu nutzt es die Erweiterung pg_stat_statements , die die Laufzeit und den Ressourcenverbrauch jeder Abfrage aufzeichnet.Eine Abfrage eignet sich für die Indexoptimierung, wenn sie – entweder pro Ausführung oder insgesamt – den höchsten Ressourcenverbrauch aufweist. Derzeit verwenden wir die Ausführungszeit als Indikator für den kumulativen Ressourcenverbrauch. Es kann jedoch auch sinnvoll sein, spezifische Ressourcen zu betrachten, z. B. die Anzahl der aufgerufenen oder gelesenen Blöcke. Das Tool analyze_query_workload konzentriert sich auf langsame Abfragen und verwendet die durchschnittliche Zeit pro Ausführung mit Schwellenwerten für die Anzahl der Ausführungen und die durchschnittliche Ausführungszeit. Agenten können auch get_top_queries aufrufen, das einen Parameter für die durchschnittliche vs. gesamte Ausführungszeit akzeptiert. Anschließend können diese Abfragen analyze_query_indexes übergeben werden, um Indexempfehlungen zu erhalten.Ausgefeilte Indexoptimierungssysteme nutzen die „Workload-Komprimierung“, um eine repräsentative Teilmenge von Abfragen zu erstellen, die die Eigenschaften der gesamten Workload widerspiegelt und so das Problem für nachgelagerte Algorithmen reduziert. Postgres MCP Pro führt eine eingeschränkte Form der Workload-Komprimierung durch, indem es Abfragen normalisiert, sodass Abfragen, die aus derselben Vorlage generiert wurden, als eine einzige erscheinen. Jede Abfrage wird gleich gewichtet – eine Vereinfachung, die sich bei großen Indexierungsvorteilen bewährt.
  2. Generieren von Kandidatenindizes: Sobald wir eine Liste von SQL-Abfragen haben, die wir durch Indizierung verbessern möchten, generieren wir eine Liste von Indizes, die wir möglicherweise hinzufügen möchten. Dazu analysieren wir das SQL und identifizieren alle Spalten, die in Filtern, Verknüpfungen, Gruppierungen oder Sortierungen verwendet werden.Um alle möglichen Indizes zu generieren, müssen wir Kombinationen dieser Spalten berücksichtigen, da Postgres mehrspaltige Indizes unterstützt. In der vorliegenden Implementierung berücksichtigen wir nur eine zufällig ausgewählte Permutation jedes möglichen mehrspaltigen Indexes. Diese Vereinfachung dient der Reduzierung des Suchraums, da Permutationen oft eine gleichwertige Performance aufweisen. Wir hoffen jedoch, in diesem Bereich Verbesserungen zu erzielen.
  3. Suche nach der optimalen Indexkonfiguration . Unser Ziel ist es, die Indexkombination zu finden, die die Performancevorteile optimal mit den Kosten für Speicherung und Pflege der Indizes in Einklang bringt. Wir schätzen die Leistungsverbesserung mithilfe der „Was wäre wenn?“-Funktionen der hypopg Erweiterung ab. Diese simuliert, wie der Postgres-Abfrageoptimierer eine Abfrage nach dem Hinzufügen von Indizes ausführt, und meldet Änderungen basierend auf dem tatsächlichen Postgres-Kostenmodell.Eine Herausforderung besteht darin, dass die Erstellung von Abfrageplänen in der Regel die Kenntnis der in der Abfrage verwendeten spezifischen Parameterwerte erfordert. Die Abfragenormalisierung, die zur Reduzierung der betrachteten Abfragen erforderlich ist, entfernt Parameterkonstanten. Über Bind-Variablen bereitgestellte Parameterwerte stehen uns ebenfalls nicht zur Verfügung.Um dieses Problem zu lösen, erstellen wir realistische Konstanten, die wir als Parameter bereitstellen können, indem wir Stichproben aus den Tabellenstatistiken ziehen. In Version 16 hat Postgres eine generische „Explain Plan“-Funktionalität hinzugefügt, die jedoch Einschränkungen aufweist, beispielsweise im Zusammenhang mit LIKE Klauseln, die unsere Implementierung nicht aufweist.Die Suchstrategie ist entscheidend, da die Auswertung aller möglichen Indexkombinationen nur in einfachen Situationen möglich ist. Darin unterscheiden sich die verschiedenen Indexierungsansätze am meisten. Basierend auf dem Anytime-Algorithmus von Microsoft verwenden wir eine Greedy-Search-Strategie. Dabei suchen wir zunächst die beste Ein-Index-Lösung und anschließend den besten Index, der hinzugefügt werden kann, um eine Zwei-Index-Lösung zu erhalten. Unsere Suche endet, wenn das Zeitbudget erschöpft ist oder eine Suchrunde keine Verbesserungen über die Mindestverbesserungsschwelle von 10 % hinaus liefert.
  4. Kosten-Nutzen-Analyse . Wie entscheiden wir uns für eine Indizierungsalternative, wenn wir vor der Wahl stehen – eine mit besserer Performance und eine mit höherem Speicherplatzbedarf? Traditionell verlangen Indexberater ein Speicherbudget und optimieren die Leistung im Hinblick auf dieses Budget. Wir nehmen ebenfalls ein Speicherbudget, führen aber während der Optimierung eine Kosten-Nutzen-Analyse durch.Wir formulieren dies als das Problem der Auswahl eines Punktes entlang der Pareto-Front – der Reihe von Auswahlmöglichkeiten, bei denen die Verbesserung einer Qualitätsmetrik notwendigerweise eine andere verschlechtert. In einer idealen Welt würden wir die Kosten des Speichers und den Nutzen der verbesserten Leistung in Geldbeträgen bewerten. Es gibt jedoch einen einfacheren und praktikableren Ansatz: die Veränderungen relativ zu betrachten. Die meisten Leute würden zustimmen, dass sich eine 100-fache Leistungsverbesserung lohnt, selbst wenn die Speicherkosten doppelt so hoch sind. In unserer Implementierung verwenden wir einen konfigurierbaren Parameter, um diesen Schwellenwert festzulegen. Standardmäßig verlangen wir, dass die Änderung im Logarithmus (Basis 10) der Leistungsverbesserung das Doppelte der Differenz im Logarithmus der Speicherplatzkosten beträgt. Dies führt dazu, dass für eine 100-fache Leistungsverbesserung maximal eine 10-fache Speicherplatzerhöhung möglich ist.

Unsere Implementierung ist eng mit dem Anytime-Algorithmus von Microsoft SQL Server verwandt. Im Vergleich zu Dexter , einem automatischen Indizierungstool für Postgres, durchsuchen wir einen größeren Datenraum und verwenden andere Heuristiken. Dies ermöglicht uns, bessere Lösungen zu generieren, allerdings auf Kosten einer längeren Laufzeit.

Wir zeigen außerdem die in jeder Suchrunde geleistete Arbeit, einschließlich eines Vergleichs der Abfragepläne vor und nach dem Hinzufügen jedes Indexes. Dies gibt dem LLM zusätzlichen Kontext, den es bei der Beantwortung der Indexierungsempfehlungen nutzen kann.

Experimentell: Index-Tuning durch LLM

Postgres MCP Pro enthält eine experimentelle Indexoptimierungsfunktion basierend auf der Optimierung durch LLM . Anstatt Heuristiken zur Untersuchung möglicher Indexkonfigurationen zu verwenden, stellen wir Datenbankschema und Abfragepläne einem LLM zur Verfügung und bitten ihn, Indexkonfigurationen vorzuschlagen. Anschließend verwenden wir hypopg , um die Leistung mit den vorgeschlagenen Indizes vorherzusagen. Diese Ergebnisse werden anschließend an den LLM zurückgesendet, um neue Vorschläge zu erstellen. Dieser Prozess wird wiederholt, bis mehrere Iterationsrunden keine weiteren Verbesserungen mehr ergeben.

Die Indexoptimierung durch LLM bietet Vorteile, wenn der Indexsuchraum groß ist oder Indizes mit vielen Spalten berücksichtigt werden müssen. Wie bei herkömmlichen suchbasierten Ansätzen basiert sie auf der Genauigkeit der hypopg Leistungsvorhersagen.

Um eine Indexoptimierung durch LLM durchzuführen, müssen Sie einen OpenAI-API-Schlüssel angeben, indem Sie die Umgebungsvariable OPENAI_API_KEY festlegen.

Datenbankintegrität

Datenbank-Integritätsprüfungen identifizieren Optimierungsmöglichkeiten und Wartungsbedarf, bevor diese zu kritischen Problemen führen. In der aktuellen Version adaptiert Postgres MCP Pro die Datenbank-Integritätsprüfungen direkt von PgHero . Wir arbeiten an der vollständigen Validierung dieser Prüfungen und werden sie möglicherweise in Zukunft erweitern.

  • Index-Integrität . Sucht nach ungenutzten, doppelten und aufgeblähten Indizes. Aufgeblähte Indizes nutzen Datenbankseiten ineffizient. Postgres Autovacuum bereinigt Indexeinträge, die auf tote Tupel verweisen, und kennzeichnet die Einträge als wiederverwendbar. Die Indexseiten werden jedoch nicht komprimiert, sodass sie möglicherweise nur wenige aktive Tupelreferenzen enthalten.
  • Puffercache-Trefferquote . Misst den Anteil der Datenbanklesevorgänge, die aus dem Puffercache statt von der Festplatte ausgeführt werden. Eine niedrige Puffercache-Trefferquote muss untersucht werden, da sie oft nicht kostenoptimal ist und zu einer verminderten Anwendungsleistung führt.
  • Verbindungsstatus . Überprüft die Anzahl der Verbindungen zur Datenbank und meldet deren Auslastung. Das größte Risiko besteht darin, dass keine Verbindungen mehr vorhanden sind. Aber auch eine hohe Anzahl inaktiver oder blockierter Verbindungen kann auf Probleme hinweisen.
  • Vakuum-Integrität . Vakuum ist aus vielen Gründen wichtig. Ein kritischer Grund ist die Verhinderung von Transaktions-ID-Wraparounds, die dazu führen können, dass die Datenbank keine Schreibvorgänge mehr annimmt. Der Postgres-Mechanismus zur Multiversions-Parallelitätskontrolle (MVCC) erfordert für jede Transaktion eine eindeutige Transaktions-ID. Da Postgres jedoch einen vorzeichenbehafteten 32-Bit-Integer für Transaktions-IDs verwendet, muss es Transaktions-IDs nach maximal 2 Milliarden Transaktionen wiederverwenden. Dazu „friert“ es die Transaktions-IDs historischer Transaktionen ein und setzt sie alle auf einen speziellen Wert, der eine ferne Vergangenheit anzeigt. Wenn Datensätze erstmals auf die Festplatte übertragen werden, werden sie für einen Bereich von Transaktions-IDs sichtbar geschrieben. Bevor diese Transaktions-IDs wiederverwendet werden, muss Postgres alle Datensätze auf der Festplatte aktualisieren und „einfrieren“, um die Verweise auf die wiederzuverwendenden Transaktions-IDs zu entfernen. Diese Prüfung sucht nach Tabellen, die vakuumiert werden müssen, um Transaktions-ID-Wraparounds zu verhindern.
  • Replikationsintegrität . Überprüft die Replikationsintegrität, indem die Verzögerung zwischen Primär- und Replikatserver überwacht, der Replikationsstatus überprüft und die Nutzung der Replikationsslots verfolgt wird.
  • Integrität der Einschränkungen . Im Normalbetrieb lehnt Postgres alle Transaktionen ab, die eine Einschränkungsverletzung verursachen würden. Ungültige Einschränkungen können jedoch nach dem Laden von Daten oder in Wiederherstellungsszenarien auftreten. Diese Prüfung sucht nach ungültigen Einschränkungen.
  • Sequenzzustand . Sucht nach Sequenzen, bei denen das Risiko besteht, dass ihr Maximalwert überschritten wird.

Postgres-Clientbibliothek

Postgres MCP Pro nutzt psycopg3 für die asynchrone E/A-Verbindung mit Postgres. Im Hintergrund nutzt psycopg3 die libpq- Bibliothek für die Verbindung mit Postgres und bietet Zugriff auf den gesamten Postgres-Funktionsumfang und eine zugrunde liegende Implementierung, die von der Postgres-Community vollständig unterstützt wird.

Einige andere Python-basierte MCP-Server verwenden asyncpg , was die Installation vereinfachen kann, da die libpq Abhängigkeit entfällt. Asyncpg ist wahrscheinlich auch schneller als psycopg3, was wir jedoch nicht selbst überprüft haben. Ältere Benchmarks berichten von einer größeren Leistungslücke, was darauf hindeutet, dass das neuere psycopg3 diese Lücke mit zunehmender Weiterentwicklung geschlossen hat.

Unter Berücksichtigung dieser Überlegungen haben wir uns für psycopg3 statt asyncpg entschieden. Wir sind weiterhin bereit, diese Entscheidung in Zukunft zu überdenken.

Verbindungskonfiguration

Wie der Referenz-PostgreSQL-MCP-Server verwendet Postgres MCP Pro beim Start die Postgres-Verbindungsinformationen. Dies ist praktisch für Benutzer, die sich immer mit derselben Datenbank verbinden, kann aber beim Datenbankwechsel umständlich sein.

Ein alternativer Ansatz, der von PG-MCP verfolgt wird, besteht darin, Verbindungsdetails während der Nutzung über MCP-Tool-Aufrufe bereitzustellen. Dies ist praktischer für Benutzer, die zwischen Datenbanken wechseln, und ermöglicht es einem einzigen MCP-Server, mehrere Endbenutzer gleichzeitig zu unterstützen.

Es muss einen besseren Ansatz geben. Beide weisen Sicherheitslücken auf: Nur wenige MCP-Clients speichern die MCP-Serverkonfiguration sicher (eine Ausnahme ist Goose), und über MCP-Tools bereitgestellte Anmeldeinformationen werden über das LLM weitergeleitet und im Chatverlauf gespeichert. Beide weisen in manchen Szenarien zudem Probleme mit der Benutzerfreundlichkeit auf.

Schemainformationen

Der Zweck des Schemainformationstools besteht darin, dem aufrufenden KI-Agenten die Informationen bereitzustellen, die er benötigt, um korrektes und leistungsfähiges SQL zu generieren. Angenommen, ein Benutzer fragt: „Wie viele Flüge starteten im vergangenen Jahr von San Francisco und landeten in Paris?“ Der KI-Agent muss die Tabelle finden, in der die Flüge gespeichert sind, die Spalten mit den Abflug- und Zielorten und möglicherweise eine Tabelle, die Flughafencodes und Flughafenstandorte zuordnet.

Warum sollten Schemainformationstools bereitgestellt werden, wenn LLMs im Allgemeinen in der Lage sind, SQL zu generieren, um diese Informationen direkt von Postgres abzurufen?

Unsere Erfahrungen mit Claude zeigen, dass das aufrufende LLM sehr gut SQL-Befehle zur Untersuchung des Postgres-Schemas generiert, indem es den Postgres-Systemkatalog und das Informationsschema (eine ANSI-standardisierte Datenbank-Metadatenansicht) abfragt. Wir wissen jedoch nicht, ob andere LLMs dies ebenso zuverlässig und leistungsfähig tun.

Wäre es besser, Schemainformationen mithilfe von MCP-Ressourcen statt MCP-Tools bereitzustellen?

Der PostgreSQL MCP-Referenzserver nutzt Ressourcen anstelle von Tools zur Bereitstellung von Schemainformationen. Die Navigation in Ressourcen ähnelt der Navigation in einem Dateisystem, daher ist dieser Ansatz in vielerlei Hinsicht naheliegend. Allerdings ist die Ressourcenunterstützung im MCP-Client-Ökosystem weniger verbreitet als die Toolunterstützung (siehe Beispielclients ). Obwohl der MCP-Standard den Zugriff auf Ressourcen entweder durch KI-Agenten oder Endbenutzer vorsieht, unterstützen einige Clients nur die menschliche Navigation im Ressourcenbaum.

Geschützte SQL-Ausführung

KI verstärkt die seit langem bestehenden Herausforderungen beim Schutz von Datenbanken vor einer Reihe von Bedrohungen – von einfachen Fehlern bis hin zu komplexen Angriffen durch böswillige Akteure. Unabhängig davon, ob die Bedrohung zufällig oder böswillig erfolgt, gilt ein ähnliches Sicherheitskonzept mit drei Zielen: Vertraulichkeit, Integrität und Verfügbarkeit. Das bekannte Spannungsfeld zwischen Komfort und Sicherheit ist ebenfalls deutlich spürbar.

Der geschützte SQL-Ausführungsmodus von Postgres MCP Pro legt den Schwerpunkt auf Integrität. Im Kontext von MCP sind wir besonders besorgt darüber, dass LLM-generiertes SQL Schäden verursacht – beispielsweise unbeabsichtigte Datenänderungen oder -löschungen oder andere Änderungen, die den Änderungsmanagementprozess eines Unternehmens umgehen könnten.

Der einfachste Weg, Integrität zu gewährleisten, besteht darin, sicherzustellen, dass alle SQL-Anweisungen, die für die Datenbank ausgeführt werden, schreibgeschützt sind. Eine Möglichkeit hierfür ist die Erstellung eines Datenbankbenutzers mit Lesezugriff. Obwohl dieser Ansatz sinnvoll ist, empfinden ihn viele in der Praxis als umständlich. Postgres bietet keine Möglichkeit, eine Verbindung oder Sitzung schreibgeschützt zu versetzen. Daher verwendet Postgres MCP Pro einen komplexeren Ansatz, um die schreibgeschützte SQL-Ausführung zusätzlich zu einer Lese-/Schreibverbindung sicherzustellen.

Postgres MCP bietet einen schreibgeschützten Transaktionsmodus, der Daten- und Schemaänderungen verhindert. Wie der Referenz-PostgreSQL-MCP-Server verwenden wir schreibgeschützte Transaktionen, um eine geschützte SQL-Ausführung zu gewährleisten.

Um diesen Mechanismus robust zu machen, müssen wir sicherstellen, dass SQL den schreibgeschützten Transaktionsmodus nicht irgendwie umgeht, etwa indem es eine COMMIT oder ROLLBACK -Anweisung ausgibt und dann eine neue Transaktion beginnt.

Beispielsweise kann der LLM den schreibgeschützten Transaktionsmodus umgehen, indem er eine ROLLBACK -Anweisung ausgibt und anschließend eine neue Transaktion startet. Beispiel:

ROLLBACK; DROP TABLE users;

Um solche Fälle zu vermeiden, analysieren wir das SQL vor der Ausführung mithilfe der pglast -Bibliothek. Wir lehnen SQL ab, das commit oder rollback Anweisungen enthält. Hilfreicherweise erlauben die gängigen Postgres-Stored-Procedure-Sprachen, einschließlich PL/pgSQL und PL/Python, keine COMMIT oder ROLLBACK Anweisungen. Wenn Sie unsichere Stored-Procedure-Sprachen für Ihre Datenbank aktiviert haben, könnten unsere schreibgeschützten Schutzmechanismen umgangen werden.

Derzeit bietet Postgres MCP Pro zwei Schutzebenen für die Datenbank, eine an den beiden Enden des Komfort-/Sicherheitsspektrums.

  • „Unrestricted“ bietet maximale Flexibilität. Es eignet sich für Entwicklungsumgebungen, in denen Geschwindigkeit und Flexibilität an erster Stelle stehen und keine Notwendigkeit besteht, wertvolle oder sensible Daten zu schützen.
  • „Eingeschränkt“ bietet ein Gleichgewicht zwischen Flexibilität und Sicherheit. Es eignet sich für Produktionsumgebungen, in denen die Datenbank nicht vertrauenswürdigen Benutzern zugänglich ist und der Schutz wertvoller oder vertraulicher Daten wichtig ist.

Der uneingeschränkte Modus entspricht dem Ansatz des Autostart-Modus von Cursor , bei dem der KI-Agent mit eingeschränkter menschlicher Aufsicht oder Genehmigung arbeitet. Wir gehen davon aus, dass der Autostart in Entwicklungsumgebungen eingesetzt wird, in denen Fehler nur geringe Folgen haben, Datenbanken keine wertvollen oder sensiblen Daten enthalten und bei Bedarf neu erstellt oder aus Backups wiederhergestellt werden können.

Wir haben den eingeschränkten Modus konservativ gestaltet und setzen auf Sicherheit, auch wenn dies unbequem sein kann. Der eingeschränkte Modus ist auf schreibgeschützte Operationen beschränkt, und wir begrenzen die Ausführungszeit von Abfragen, um zu verhindern, dass lang andauernde Abfragen die Systemleistung beeinträchtigen. Wir werden in Zukunft möglicherweise Maßnahmen hinzufügen, um sicherzustellen, dass der eingeschränkte Modus sicher mit Produktionsdatenbanken verwendet werden kann.

Postgres MCP Pro-Entwicklung

Die folgenden Anweisungen richten sich an Entwickler, die mit Postgres MCP Pro arbeiten möchten, oder an Benutzer, die Postgres MCP Pro lieber aus der Quelle installieren möchten.

Lokales Entwicklungs-Setup

  1. Installieren Sie uv :
    curl -sSL https://astral.sh/uv/install.sh | sh
  2. Klonen Sie das Repository :
    git clone https://github.com/crystaldba/postgres-mcp.git cd postgres-mcp
  3. Installieren Sie Abhängigkeiten :
    uv pip install -e . uv sync
  4. Führen Sie den Server aus :
    uv run postgres-mcp "postgres://user:password@localhost:5432/dbname"

Related MCP Servers

  • -
    security
    F
    license
    -
    quality
    A server implementing the Model Context Protocol (MCP) for Cursor that allows using a PostgreSQL database as storage for model contexts, enabling secure database exploration and querying.
    Last updated -
    JavaScript
    • Linux
    • Apple
  • -
    security
    A
    license
    -
    quality
    what is go-mcp-postgres? go-mcp-postgres is a Model Context Protocol (MCP) server designed for interacting with Postgres databases, allowing for easy CRUD operations and automation without the need for a Node.js or Python environment.
    Last updated -
    4
    Go
    MIT License
    • Linux
    • Apple
  • -
    security
    F
    license
    -
    quality
    A Model Context Protocol server that enables performing PostgreSQL database operations (create, read, update, delete) on User and Post entities through MCP tools.
    Last updated -
    TypeScript
  • -
    security
    A
    license
    -
    quality
    A template project for building custom MCP servers that enables direct access to PostgreSQL databases, allowing SQL query execution and schema information retrieval through the Model Context Protocol.
    Last updated -
    3
    Python
    MIT License
    • Apple
    • Linux

View all related MCP servers

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/crystaldba/postgres-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server