Ü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:
- Zugangsdaten für Ihre Datenbank.
- 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.
Option 2: Verwenden von Python
Wenn Sie pipx
installiert haben, können Sie Postgres MCP Pro mit Folgendem installieren:
Andernfalls installieren Sie Postgres MCP Pro mit uv
:
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
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
Wenn Sie uv
verwenden
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
zuCursor Settings
navigieren und dann die RegisterkarteMCP
öffnen, um auf die Konfigurationsdatei zuzugreifen. - Wenn Sie Windsurf verwenden, können Sie von der
Command Palette
zurOpen Windsurf Settings Page
navigieren, um auf die Konfigurationsdatei zuzugreifen. - Wenn Sie Goose verwenden, führen Sie
goose configure
aus und wählen Sie dannAdd 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:
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:
Für Windsurf ist das Format in mcp_config.json
etwas anders:
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:
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:
Werkzeugname | Beschreibung |
---|---|
list_schemas | Listet alle in der PostgreSQL-Instanz verfügbaren Datenbankschemata auf. |
list_objects | Listet Datenbankobjekte (Tabellen, Ansichten, Sequenzen, Erweiterungen) innerhalb eines angegebenen Schemas auf. |
get_object_details | Bietet Informationen zu einem bestimmten Datenbankobjekt, beispielsweise zu den Spalten, Einschränkungen und Indizes einer Tabelle. |
execute_sql | Führt SQL-Anweisungen in der Datenbank aus, mit Lesebeschränkungen, wenn eine Verbindung im eingeschränkten Modus besteht. |
explain_query | Ruft 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_queries | Meldet die langsamsten SQL-Abfragen basierend auf der Gesamtausführungszeit unter Verwendung von pg_stat_statements -Daten. |
analyze_workload_indexes | Analysiert die Datenbankarbeitslast, um ressourcenintensive Abfragen zu identifizieren, und empfiehlt dann optimale Indizes dafür. |
analyze_query_indexes | Analysiert eine Liste bestimmter SQL-Abfragen (bis zu 10) und empfiehlt optimale Indizes dafür. |
analyze_db_health | Fü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 Pro | Andere 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:
- 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 Toolanalyze_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 auchget_top_queries
aufrufen, das einen Parameter für die durchschnittliche vs. gesamte Ausführungszeit akzeptiert. Anschließend können diese Abfragenanalyze_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. - 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.
- 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 mitLIKE
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. - 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:
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
- Installieren Sie uv :
- Klonen Sie das Repository :
- Installieren Sie Abhängigkeiten :
- Führen Sie den Server aus :
You must be authenticated.
hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Tools
Postgres 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.
- Demo
- Schnellstart
- SSE Transport
- Installation der Postgres-Erweiterung (optional)
- Anwendungsbeispiele
- MCP-Server-API
- Ähnliche Projekte
- Häufig gestellte Fragen
- Fahrplan
- Technische Hinweise
- Postgres MCP Pro-Entwicklung
Related Resources
Related MCP Servers
- -securityFlicense-qualityA 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
- -securityAlicense-qualitywhat 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 -4GoMIT License
- -securityFlicense-qualityA 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
- -securityAlicense-qualityA 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 -3PythonMIT License