概要
インストール
コンテンツ詳細
代替品
MCP PostgreSQLオペレーションサーバーとは?
これはModel Context Protocol (MCP)に基づく専門的なPostgreSQLデータベース管理ツールで、ユーザーが自然言語クエリを使用してPostgreSQLデータベースの監視、分析、メンテナンスを行うことができます。パフォーマンス監視、テーブル構造分析、クエリ最適化提案など、さまざまなデータベース操作をサポートしています。MCP PostgreSQLオペレーションサーバーをどのように使用するか?
簡単なDocker Composeデプロイまたは直接Pythonパッケージをインストールし、データベース接続情報を設定すると、MCPプロトコルをサポートするクライアント(Claude Desktop、OpenWebUIなど)で自然言語を使用してデータベースクエリと監視を行うことができます。適用シナリオ
データベース管理者、開発者、運用チームに適しており、日常のデータベース監視、パフォーマンス分析、障害排除、容量計画、メンテナンス最適化などの作業シナリオで使用できます。主な機能
使い方
使用例
よくある質問
関連リソース
インストール
{
"mcpServers": {
"postgresql-ops": {
"command": "uvx",
"args": ["--python", "3.11", "mcp-postgresql-ops"],
"env": {
"POSTGRES_HOST": "127.0.0.1",
"POSTGRES_PORT": "15432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "changeme!@34",
"POSTGRES_DB": "ecommerce"
}
}
}
}
{
"mcpServers": {
"postgresql-ops": {
"command": "uv",
"args": ["run", "python", "-m", "src.mcp_postgresql_ops.mcp_main"],
"env": {
"PYTHONPATH": "/path/to/MCP-PostgreSQL-Ops",
"POSTGRES_HOST": "127.0.0.1",
"POSTGRES_PORT": "15432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "changeme!@34",
"POSTGRES_DB": "ecommerce"
}
}
}
}
{
"mcpServers": {
"Postgresql-A": {
"command": "uvx",
"args": ["--python", "3.11", "mcp-postgresql-ops"],
"env": {
"POSTGRES_HOST": "a.foo.com",
"POSTGRES_PORT": "5432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "postgres",
"POSTGRES_DB": "postgres"
}
},
"Postgresql-B": {
"command": "uvx",
"args": ["--python", "3.11", "mcp-postgresql-ops"],
"env": {
"POSTGRES_HOST": "b.bar.com",
"POSTGRES_PORT": "5432",
"POSTGRES_USER": "postgres",
"POSTGRES_PASSWORD": "postgres",
"POSTGRES_DB": "postgres"
}
}
}
}🚀 PostgreSQL操作と監視のためのMCPサーバー
MCP-PostgreSQL-Opsは、PostgreSQLデータベースの操作、監視、管理を行うための専用MCPサーバーです。PostgreSQL 12 - 17をサポートし、包括的なデータベース分析、パフォーマンス監視、自然言語クエリによるインテリジェントなメンテナンス推奨事項を提供します。ほとんどの機能は独立して動作しますが、高度なクエリ分析機能は、pg_stat_statementsと(オプションで)pg_stat_monitor拡張機能をインストールすると強化されます。
🚀 クイックスタート
1. 環境セットアップ
⚠️ 重要提示
スーパーユーザー権限を持つとすべてのデータベースとシステム情報にアクセスできますが、MCPサーバーは基本的な監視タスクには通常のユーザー権限でも動作します。
git clone https://github.com/call518/MCP-PostgreSQL-Ops.git
cd MCP-PostgreSQL-Ops
### チェックと.envファイルの修正
cp .env.example .env
vim .env
### デフォルトを変更する必要はありませんが、独自のPostgreSQLサーバーを使用する場合は、以下を編集します。
POSTGRES_HOST=host.docker.internal
POSTGRES_PORT=15432 # ホストアクセス用の外部ポート(内部の5432にマッピング)
POSTGRES_USER=postgres
POSTGRES_PASSWORD=changeme!@34
POSTGRES_DB=ecommerce # デフォルトの接続データベース。スーパーユーザーはすべてのデータベースにアクセスできます。
⚠️ 重要提示
PGDATA=/data/dbはPercona PostgreSQL Dockerイメージに事前構成されており、適切な書き込み権限を得るためにこの特定のパスが必要です。
2. デモコンテナの起動
# テスト用の組み込みPostgreSQLを含むすべてのコンテナを起動
docker-compose up -d
# 代替案:独自のPostgreSQLインスタンスを使用する場合
# docker-compose.ymlのpostgresとpostgres-init-extensionsサービスをコメントアウト
# その後、カスタム構成を使用します。
# docker-compose -f docker-compose.custom-db.yml up -d
⚠️ 重要提示
初期の環境セットアップには数分かかります。コンテナは順番に起動されます。
- PostgreSQLコンテナが最初に起動し、データベースの初期化が行われます。
- PostgreSQL拡張機能コンテナが拡張機能をインストールし、包括的なテストデータ(約83Kレコード)を作成します。
- MCPサーバーとMCPOプロキシコンテナは、PostgreSQLが準備できた後に起動します。
- OpenWebUIコンテナが最後に起動し、Webインターフェイスの読み込みに追加の時間がかかる場合があります。
💡 使用建议
docker-compose up -dを実行してから2 - 3分待ってからOpenWebUIにアクセスし、すべてのサービスが完全に初期化されていることを確認してください。
🔍 コンテナの状態を確認する(オプション):
# コンテナの起動プログレスを監視
docker-compose logs -f
# すべてのコンテナが実行中かどうかを確認
docker-compose ps
# PostgreSQLが準備できていることを確認
docker-compose logs postgres | grep "ready to accept connections"
3. OpenWebUIへのアクセス
http://localhost:3003/
swaggerによって提供されるMCPツールの機能のリストは、MCPO API Docs URLで確認できます。- 例:
http://localhost:8003/docs
- 例:
4. OpenWebUIでのツールの登録
- 管理者アカウントでOpenWebUIにログインします。
- 上部メニューから「設定」→「ツール」に移動します。
postgresql-opsツールのアドレス(例:http://localhost:8003/postgresql-ops)を入力して、MCPツールを接続します。- OllamaまたはOpenAIを設定します。
5. 完了!
おめでとうございます! MCP PostgreSQL操作サーバーが使用可能になりました。自然言語クエリでデータベースを探索し始めることができます。
🚀 これらのサンプルクエリを試してみましょう:
- 「現在のアクティブな接続を表示してください」
- 「システムで最も遅いクエリは何ですか?」
- 「すべてのデータベースのテーブルのブロートを分析してください」
- 「データベースのサイズ情報を表示してください」
- 「VACUUMメンテナンスが必要なテーブルはどれですか?」
📖 次のステップ:
- 以下の**サンプルクエリセクション** を参照して、さらなるクエリ例を確認してください。
- スクリーンショット付きのツール使用例 を確認して、ビジュアルガイドを参照してください。
- ツール互換性マトリックス を探索して、利用可能な機能を理解してください。
✨ 主な機能
- ✅ ゼロコンフィグレーション:PostgreSQL 12 - 17で即座に動作し、自動的にバージョンを検出します。
- ✅ 自然言語:「遅いクエリを表示して」や「テーブルのブロートを分析して」などの質問をすることができます。
- ✅ 本番環境での安全性:読み取り専用操作で、RDS/Auroraと通常のユーザー権限で互換性があります。
- ✅ 拡張機能による強化:オプションの
pg_stat_statementsとpg_stat_monitorにより、高度なクエリ分析が可能です。 - ✅ 包括的なデータベース監視:パフォーマンス分析、ブロート検出、メンテナンス推奨事項を提供します。
- ✅ スマートクエリ分析:
pg_stat_statementsとpg_stat_monitorを統合した遅いクエリの特定が可能です。 - ✅ スキーマとリレーションシップの探索:詳細なリレーションシップマッピングでデータベース構造を探索します。
- ✅ VACUUMとAutovacuumのインテリジェンス:リアルタイムのメンテナンス監視と有効性分析を提供します。
- ✅ マルチデータベース操作:シームレスなクロスデータベース分析と監視が可能です。
- ✅ エンタープライズ対応:安全な読み取り専用操作で、RDS/Auroraと互換性があります。
- ✅ 開発者に優しい:簡単なカスタマイズとツール拡張が可能なシンプルなコードベースです。
🔧 高度な機能
- バージョン対応のI/O統計(PostgreSQL 16+で強化)
- リアルタイムの接続とロック監視
- バックグラウンドプロセスとチェックポイント分析
- レプリケーションステータスとWAL監視
- データベース容量とブロート分析
💻 使用例
📸 スクリーンショット付きの詳細な例 →
基本的な使用法
# ここにはオリジナルのコードとコメントがそのまま表示されます。
# コードやコメントの内容は変更されません。
# 例えば、以下のようなコードがある場合
# (ここには実際のコードが入りますが、原文書に合わせて記載)
高度な使用法
# 高度なシナリオの説明 - 日本語
# ここにもオリジナルのコードがそのまま表示されます。
# (ここには実際のコードが入りますが、原文書に合わせて記載)
📚 ドキュメント
ツール互換性マトリックス
自動適応:すべてのツールは、サポートされているバージョン間で透過的に動作し、設定は必要ありません!
🟢 拡張機能に依存しないツール(拡張機能不要)
| ツール名 | 必要な拡張機能 | PG 12 | PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | 使用されるシステムビュー/テーブル |
|---|---|---|---|---|---|---|---|---|
get_server_info |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | version(), pg_extension |
get_active_connections |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_activity |
get_postgresql_config |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_settings |
get_database_list |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_database |
get_table_list |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | information_schema.tables |
get_table_schema_info |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | information_schema.*, pg_indexes |
get_database_schema_info |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_namespace, pg_class, pg_proc |
get_table_relationships |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | information_schema.* (制約) |
get_user_list |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_user, pg_roles |
get_index_usage_stats |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_indexes |
get_database_size_info |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_database_size() |
get_table_size_info |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_total_relation_size() |
get_vacuum_analyze_stats |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_current_database_info |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_database, current_database() |
get_table_bloat_analysis |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_database_bloat_overview |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_autovacuum_status |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_autovacuum_activity |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_running_vacuum_operations |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_activity |
get_vacuum_effectiveness_analysis |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_table_bloat_analysis |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_database_bloat_overview |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_user_tables |
get_lock_monitoring |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_locks, pg_stat_activity |
get_wal_status |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_current_wal_lsn() |
get_database_stats |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_database |
get_table_io_stats |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_statio_user_tables |
get_index_io_stats |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_statio_user_indexes |
get_database_conflicts_stats |
❌ なし | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | pg_stat_database_conflicts |
🚀 バージョン対応のツール(自動適応)
| ツール名 | 必要な拡張機能 | PG 12 | PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | 特別な機能 |
|---|---|---|---|---|---|---|---|---|
get_io_stats |
❌ なし | ✅ 基本 | ✅ 基本 | ✅ 基本 | ✅ 基本 | ✅ 強化 | ✅ 強化 | PG16+:pg_stat_ioサポート |
get_bgwriter_stats |
❌ なし | ✅ | ✅ | ✅ | ✅ 特別 | ✅ | ✅ | PG15:別のチェックポインター統計 |
get_replication_status |
❌ なし | ✅ 互換性あり | ✅ 強化 | ✅ 強化 | ✅ 強化 | ✅ 強化 | ✅ 強化 | PG13+:wal_status, safe_wal_size;PG16+:強化されたWALレシーバー |
get_all_tables_stats |
❌ なし | ✅ 互換性あり | ✅ 強化 | ✅ 強化 | ✅ 強化 | ✅ 強化 | ✅ 強化 | PG13+:n_ins_since_vacuum追跡によるバキュームメンテナンスの最適化 |
get_user_functions_stats |
⚙️ 設定が必要 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | track_functions=plが必要 |
🟡 拡張機能に依存するツール(拡張機能が必要)
| ツール名 | 必要な拡張機能 | PG 12 | PG 13 | PG 14 | PG 15 | PG 16 | PG 17 | 注意事項 |
|---|---|---|---|---|---|---|---|---|
get_pg_stat_statements_top_queries |
pg_stat_statements |
✅ 互換性あり | ✅ 強化 | ✅ 強化 | ✅ 強化 | ✅ 強化 | ✅ 強化 | PG12:total_time → total_exec_time;PG13+:ネイティブのtotal_exec_time |
get_pg_stat_monitor_recent_queries |
pg_stat_monitor |
✅ 互換性あり | ✅ 強化 | ✅ 強化 | ✅ 強化 | ✅ 強化 | ✅ 強化 | PG12:total_time → total_exec_time;PG13+:ネイティブのtotal_exec_time |
📋 PostgreSQL 18サポート:PostgreSQL 18は現在ベータ段階であり、Percona Distribution PostgreSQLではまだサポートされていません。PostgreSQL 18が安定版になり、配布サポートが利用可能になったら、サポートが追加されます。
サンプルクエリ
🟢 拡張機能に依存しないツール(常に利用可能)
- get_server_info
- 「PostgreSQLサーバーのバージョンと拡張機能の状態を表示してください。」
- 「pg_stat_statementsがインストールされているか確認してください。」
- get_active_connections
- 「すべてのアクティブな接続を表示してください。」
- 「現在のセッションをデータベースとユーザーとともにリストしてください。」
- get_postgresql_config
- 「すべてのPostgreSQL構成パラメータを表示してください。」
- 「すべてのメモリ関連の構成設定を見つけてください。」
- get_database_list
- 「すべてのデータベースとそのサイズをリストしてください。」
- 「オーナー情報付きでデータベースリストを表示してください。」
- get_table_list
- 「ecommerceデータベース内のすべてのテーブルをリストしてく,ださい。」
- 「publicスキーマ内のテーブルサイズを表示してください。」
- get_table_schema_info
- 「ecommerceデータベース内のcustomersテーブルの詳細なスキーマ情報を表示してください。」
- 「ecommerceデータベース内のproductsテーブルの列詳細と制約を取得してください。」
- 「ecommerceデータベースのsalesスキーマ内のordersテーブルのインデックスと外部キーを含むテーブル構造を分析してください。」
- 「inventoryデータベースのpublicスキーマ内のすべてのテーブルのスキーマ概要を表示してください。」
- 📋 機能:列タイプ、制約、インデックス、外部キー、テーブルメタデータ
- ⚠️ 必要条件:
database_nameパラメータを指定する必要があります。
- get_database_schema_info
- 「ecommerceデータベース内のすべてのスキーマとその内容を表示してください。」
- 「ecommerceデータベース内のsalesスキーマの詳細情報を取得してください。」
- 「inventoryデータベースのスキーマ構造とパーミッションを分析してください。」
- 「hr_systemデータベースのテーブル数とサイズ付きのスキーマ概要を表示してください。」
- 📋 機能:スキーマオーナー、パーミッション、オブジェクト数、サイズ、内容
- ⚠️ 必要条件:
database_nameパラメータを指定する必要があります。
- get_table_relationships
- 「ecommerceデータベース内のcustomersテーブルのすべてのリレーションシップを表示してください。」
- 「ecommerceデータベースのsalesスキーマ内のordersテーブルの外部キーリレーションシップを分析してください。」
- 「ecommerceデータベース全体のリレーションシップ概要を取得してください。」
- 「ecommerceデータベース内のproductsテーブルを参照するすべてのテーブルを見つけてください。」
- 「inventoryデータベース内のクロススキーマリレーションシップを表示してください。」
- 📋 機能:外部キーリレーションシップ(インバウンド/アウトバウンド)、クロススキーマ依存関係、制約詳細
- ⚠️ 必要条件:
database_nameパラメータを指定する必要があります。 - 💡 使用方法:
table_nameを空にすると、データベース全体のリレーションシップ分析が可能です。
- get_user_list
- 「すべてのデータベースユーザーとそのロールをリストしてください。」
- 「特定のデータベースのユーザーパーミッションを表示してください。」
- get_index_usage_stats
- 「インデックスの使用効率を分析してください。」
- 「現在のデータベース内の未使用のインデックスを見つけてください。」
- get_database_size_info
- 「データベースの容量分析を表示してください。」
- 「サイズが最も大きいデータベースを見つけてください。」
- get_table_size_info
- 「テーブルとインデックスのサイズ分析を表示してください。」
- 「特定のスキーマ内の最も大きいテーブルを見つけてください。」
- get_vacuum_analyze_stats
- 「最近のVACUUMとANALYZE操作を表示してください。」
- 「VACUUMが必要なテーブルをリストしてください。」
- get_current_database_info
- 「現在接続しているデータベースは何ですか?」
- 「現在のデータベース情報と接続詳細を表示してください。」
- 「データベースのエンコーディング、照合順序、サイズ情報を表示してください。」
- 📋 機能:データベース名、エンコーディング、照合順序、サイズ、接続制限
- 🔧 PostgreSQL 12 - 17:完全に互換性があり、拡張機能は必要ありません。
- get_table_bloat_analysis
- 「現在のデータベース内のテーブルのブロートを分析してください。」
- 「ecommerceデータベース内のデッドタプル比率の高いテーブルを表示してください。」
- 「VACUUMメンテナンスが必要なテーブルを見つけてください。」
- 「5000以上のデッドタプルを持つテーブルのブロートを確認してください。」
- 📋 機能:デッドタプル比率、推定ブロートサイズ、VACUUM推奨事項
- ⚠️ 必要条件:クロスデータベース分析の場合は
database_nameを指定する必要があります。
- get_database_bloat_overview
- 「スキーマ別のデータベース全体のブロート概要を表示してください。」
- 「inventoryデータベースのブロート概要を取得してください。」
- 「ブロート比率が最も高いスキーマを特定してください。」
- 「ブロート統計を使用したデータベースメンテナンス計画。」
- 📋 機能:スキーマレベルの集計、メンテナンス優先度、サイズ推奨事項
- get_lock_monitoring
- 「現在のすべてのロックとブロックされたセッションを表示してください。」
- 「granted=falseフィルターでブロックされたセッションのみを表示してください。」
- 「特定のユーザーによるロックをユーザー名フィルターで監視してください。」
- 「モードフィルターで排他ロックを確認してください。」
- get_wal_status
- 「WALの状態とアーカイブ情報を表示してください。」
- 「WALの生成と現在のLSN位置を監視してください。」
- get_replication_status
- 「レプリケーション接続と遅延状態を確認してください。」
- 「レプリケーションスロットとWALレシーバーの状態を監視してください。」
- get_database_stats
- 「包括的なデータベースパフォーマンスメトリックを表示してください。」
- 「トランザクションコミット比率とI/O統計を分析してください。」
- 「バッファキャッシュヒット比率と一時ファイルの使用状況を監視してください。」
- get_bgwriter_stats
- 「チェックポイントのパフォーマンスとタイミングを分析してください。」
- 「チェックポイントのパフォーマンスを表示してください。」
- 「バックグラウンドライターの効率統計を表示してください。」
- 「バッファ割り当てとfsyncパターンを監視してください。」
- get_user_functions_stats
- 「ユーザー定義関数のパフォーマンスを分析してください。」
- 「関数の呼び出し回数と実行時間を表示してください。」
- 「カスタム関数のパフォーマンスボトルネックを特定してください。」
- ⚠️ 必要条件:
postgresql.confでtrack_functions = plが必要です。
- get_table_io_stats
- 「テーブルのI/Oパフォーマンスとバッファヒット比率を分析してください。」
- 「バッファキャッシュパフォーマンスの低いテーブルを特定してください。」
- 「TOASTテーブルのI/O統計を監視してください。」
- 💡 強化機能:正確なタイミングのために
track_io_timing = onを有効にすると強化されます。
- get_index_io_stats
- 「インデックスのI/Oパフォーマンスとバッファ効率を表示してください。」
- 「過度のディスクI/Oを引き起こすインデックスを特定してください。」
- 「インデックスのキャッシュ適合性パターンを監視してください。」
- 💡 強化機能:正確なタイミングのために
track_io_timing = onを有効にすると強化されます。
- get_database_conflicts_stats
- 「スタンバイサーバーでのレプリケーションコンフリクトを確認してください。」
- 「コンフリクトの種類と解決統計を分析してください。」
- 「スタンバイサーバーのクエリキャンセルパターンを監視してください。」
- 「WALの生成と現在のLSN位置を監視してください。」
- get_replication_status
- 「レプリケーション接続と遅延状態を確認してください。」
- 「レプリケーションスロットとWALレシーバーの状態を監視してください。」
🚀 バージョン対応のツール(自動適応)
- get_io_stats (新機能!)
- 「包括的なI/O統計を表示してください。」(PostgreSQL 16+で詳細な内訳が提供されます)
- 「I/O統計を分析してください。」
- 「バッファキャッシュの効率とI/Oタイミングを分析してください。」
- 「バックエンドタイプとコンテキスト別のI/Oパターンを監視してください。」
- 📈 PG16+:タイミング、バックエンドタイプ、コンテキストを含む完全な
pg_stat_ioサポート - 📊 PG12 - 15:バッファヒット比率を含む基本的な
pg_statio_*フォールバック
- get_bgwriter_stats (強化機能!)
- 「バックグラウンドライターとチェックポイントのパフォーマンスを表示してください。」
- 📈 PG15:別のチェックポインターとバックグラウンドライターの統計(独自機能)
- 📊 PG12 - 14, 16+:チェックポインターデータを含む統合されたバックグラウンドライター統計
- get_server_info (強化機能!)
- 「サーバーのバージョンと互換性機能を表示してください。」
- 「サーバーの互換性を確認してください。」
- 「このPostgreSQLバージョンで利用可能なMCPツールを確認してください。」
- 「機能可用性マトリックスとアップグレード推奨事項を表示します。」
- get_all_tables_stats (強化機能!)
- 「すべてのテーブルの包括的な統計を表示してください。」(PG12 - 17に互換性があります)
- 「include_system=trueパラメータでシステムテーブルを含めます。」
- 「テーブルのアクセスパターンとメンテナンスニーズを分析してください。」
- 📈 PG13+:バキューム以降の挿入数(
n_ins_since_vacuum)を追跡して、最適なメンテナンススケジューリングを行います。 - 📊 PG12:サポートされていない列にはNULLが表示される互換モード
🟡 拡張機能に依存するツール
- get_pg_stat_statements_top_queries (
pg_stat_statementsが必要)- 「最も遅い上位10のクエリを表示してください。」
- 「inventoryデータベース内の遅いクエリを分析してください。」
- 📈 バージョン互換性:PG12では
total_time→total_exec_timeのマッピングが使用され、PG13+ではネイティブの列が使用されます。 - 💡 クロスバージョン:PostgreSQL 12 - 17の互換性のためにクエリ構造を自動的に適応させます。
- get_pg_stat_monitor_recent_queries (オプション、
pg_stat_monitorを使用)- 「最近のクエリをリアルタイムで表示してください。」
- 「過去5分間のクエリアクティビティを監視してください。」
- 📈 バージョン互換性:PG12では
total_time→total_exec_timeのマッピングが使用され、PG13+ではネイティブの列が使用されます。 - 💡 クロスバージョン:PostgreSQL 12 - 17の互換性のためにクエリ構造を自動的に適応させます。
💡 プロのヒント:すべてのツールはdatabase_nameパラメータを使用したマルチデータベース操作をサポートしています。これにより、PostgreSQLのスーパーユーザーは単一のMCPサーバーインスタンスから複数のデータベースを分析および監視することができます。
環境変数
| 変数 | 説明 | デフォルト | プロジェクトのデフォルト |
|---|---|---|---|
PYTHONPATH |
MCPサーバーのインポートのためのPythonモジュール検索パス | - | /app/src |
MCP_LOG_LEVEL |
サーバーのログ詳細度(DEBUG, INFO, WARNING, ERROR) | INFO |
INFO |
FASTMCP_TYPE |
MCPのトランスポートプロトコル(CLI用のstdio、Web用のstreamable-http) | stdio |
streamable-http |
FASTMCP_HOST |
HTTPサーバーのバインドアドレス(すべてのインターフェースに対して0.0.0.0) | 127.0.0.1 |
0.0.0.0 |
FASTMCP_PORT |
MCP通信のためのHTTPサーバーポート | 8080 |
8080 |
PGSQL_VERSION |
Dockerイメージ選択のためのPostgreSQLのメジャーバージョン | 17 |
17 |
PGDATA |
Dockerコンテナ内のPostgreSQLデータディレクトリ(変更しないでください) | /var/lib/postgresql/data |
/data/db |
POSTGRES_HOST |
PostgreSQLサーバーのホスト名またはIPアドレス | 127.0.0.1 |
host.docker.internal |
POSTGRES_PORT |
PostgreSQLサーバーのポート番号 | 5432 |
15432 |
POSTGRES_USER |
PostgreSQL接続のユーザー名(読み取り権限が必要) | postgres |
postgres |
POSTGRES_PASSWORD |
PostgreSQLユーザーのパスワード(特殊文字をサポート) | changeme!@34 |
changeme!@34 |
POSTGRES_DB |
接続のためのデフォルトのデータベース名 | testdb |
ecommerce |
POSTGRES_MAX_CONNECTIONS |
PostgreSQLのmax_connections構成パラメータ |
200 |
200 |
DOCKER_EXTERNAL_PORT_OPENWEBUI |
Open WebUIコンテナのホストポートマッピング | 8080 |
3003 |
DOCKER_EXTERNAL_PORT_MCP_SERVER |
MCPサーバーコンテナのホストポートマッピング | 8080 |
18003 |
DOCKER_EXTERNAL_PORT_MCPO_PROXY |
MCPOプロキシコンテナのホストポートマッピング | 8000 |
8003 |
DOCKER_INTERNAL_PORT_POSTGRESQL |
PostgreSQLコンテナの内部ポート | 5432 |
5432 |
注意:POSTGRES_DBは、特定のデータベースが指定されない場合の操作のデフォルトのターゲットデータベースとして機能します。Docker環境では、デフォルト以外の名前に設定された場合、このデータベースはPostgreSQLの最初の起動時に自動的に作成されます。
ポート構成:組み込みのPostgreSQLコンテナはポートマッピング15432:5432を使用します。
POSTGRES_PORT = 15432:ホストアクセスとMCPサーバー接続のための外部ポートDOCKER_INTERNAL_PORT_POSTGRESQL = 5432:コンテナの内部ポート(PostgreSQLのデフォルト)- 外部のPostgreSQLサーバーを使用する場合は、
POSTGRES_PORTをサーバーの実際のポートに合わせて設定してください。
前提条件
必要なPostgreSQL拡張機能
詳細については、## ツール互換性マトリックスを参照してください。
注意:ほとんどのMCPツールは、PostgreSQL拡張機能なしでも動作します。一部の高度なパフォーマンス分析ツールには以下の拡張機能が必要です。
-- クエリパフォーマンス統計(get_pg_stat_statements_top_queriesにのみ必要)
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
-- 高度な監視(オプション、get_pg_stat_monitor_recent_queriesで使用)
CREATE EXTENSION IF NOT EXISTS pg_stat_monitor;
クイックセットアップ:新しいPostgreSQLインストールの場合、postgresql.confに以下を追加します。
shared_preload_libraries = 'pg_stat_statements'
その後、PostgreSQLを再起動し、上記のCREATE EXTENSIONコマンドを実行します。
pg_stat_statementsは、遅いクエリ分析ツールにのみ必要です。pg_stat_monitorはオプションで、リアルタイムのクエリ監視に使用されます。- 他のすべてのツールは、これらの拡張機能なしで動作します。
最小要件
- PostgreSQL 12+(PostgreSQL 17でテスト済み)
- Python 3.11
- PostgreSQLサーバーへのネットワークアクセス
- システムカタログへの読み取り権限
必要なPostgreSQL構成
⚠️ 統計収集設定: 一部のMCPツールは、統計を収集するために特定のPostgreSQL構成パラメータを必要とします。以下の構成方法から1つを選択してください。
これらの設定に影響を受けるツール:
- get_user_functions_stats:
track_functions = plまたはtrack_functions = allが必要です。 - get_table_io_stats と get_index_io_stats:
track_io_timing = onを有効にすると、より正確なタイミングが得られます。 - get_database_stats:
track_io_timing = onを有効にすると、強化されたI/Oタイミングが得られます。
検証: いずれかの方法を適用した後、設定を検証します。
SELECT name, setting, context FROM pg_settings WHERE name IN ('track_activities', 'track_counts', 'track_io_timing', 'track_functions') ORDER BY name;
name | setting | context
------------------+---------+-----------
track_activities | on | superuser
track_counts | on | superuser
track_functions | pl | superuser
track_io_timing | on | superuser
(4 rows)
方法1: postgresql.conf(自己管理型PostgreSQLに推奨)
postgresql.confに以下を追加します。
# 基本的な統計収集(通常はデフォルトで有効になっています)
track_activities = on
track_counts = on
# 関数統計ツールに必要
track_functions = pl # PL/pgSQL関数の統計収集を有効にします。
# オプションですが、正確なI/Oタイミングのために推奨されます。
track_io_timing = on # I/Oタイミング統計の収集を有効にします。
その後、PostgreSQLサーバーを再起動します。
方法2: PostgreSQL起動パラメータ
DockerまたはコマンドラインでのPostgreSQL起動の場合:
# Dockerの例
docker run -d \
-e POSTGRES_PASSWORD=mypassword \
postgres:17 \
-c track_activities=on \
-c track_counts=on \
-c track_functions=pl \
-c track_io_timing=on
# 直接のpostgresコマンド
postgres -D /data \
-c track_activities=on \
-c track_counts=on \
-c track_functions=pl \
-c track_io_timing=on
方法3: 動的構成(AWS RDS、Azure、GCP、管理型サービス)
postgresql.confを変更できない管理型PostgreSQLサービスの場合は、SQLコマンドを使用して設定を動的に変更します。
-- 基本的な統計収集を有効にする(通常はデフォルトで有効になっています)
ALTER SYSTEM SET track_activities = 'on';
ALTER SYSTEM SET track_counts = 'on';
-- 関数統計収集を有効にする(スーパーユーザー権限が必要)
ALTER SYSTEM SET track_functions = 'pl';
-- I/Oタイミング統計を有効にする(オプションですが推奨されます)
ALTER SYSTEM SET track_io_timing = 'on';
-- 再起動せずに構成をリロードする(別々に実行)
SELECT pg_reload_conf();
セッションレベルのテスト用の代替方法:
-- 現在のセッションのみに設定する(一時的)
SET track_activities = 'on';
SET track_counts = 'on';
SET track_functions = 'pl';
SET track_io_timing = 'on';
注意:コマンドラインツールを使用する場合は、各SQLステートメントを別々に実行して、トランザクションブロックエラーを避けてください。
RDS/Aurora互換性
- このサーバーは読み取り専用で、RDS/Auroraの通常のロールで動作します。高度な分析を行う場合は、
pg_stat_statementsを有効にしてください。pg_stat_monitorは管理型エンジンでは利用できません。 - RDS/Auroraでは、永続的な設定にはDBパラメータグループを
ALTER SYSTEMよりも優先して使用してください。-- プリロード設定を確認する SHOW shared_preload_libraries; -- ターゲットデータベースで拡張機能を有効にする CREATE EXTENSION IF NOT EXISTS pg_stat_statements; -- 監視のための推奨される可視性を付与する GRANT pg_read_all_stats TO <app_user>;
🔧 技術詳細
トラブルシューティング
接続問題
- PostgreSQLサーバーの状態を確認します。
.envファイル内の接続パラメータを検証します。- ネットワーク接続性を確認します。
- ユーザー権限を確認します。
拡張機能エラー
get_server_infoを実行して、拡張機能の状態を確認します。- 不足している拡張機能をインストールします。
CREATE EXTENSION pg_stat_statements; CREATE EXTENSION pg_stat_monitor; - 必要に応じてPostgreSQLを再起動します。
構成問題
-
関数統計に「データが見つかりません」と表示される場合:
track_functions設定を確認します。SHOW track_functions; -- 'pl'または'all'である必要があります。管理型サービス(AWS RDSなど)のクイック修正:
ALTER SYSTEM SET track_functions = 'pl'; SELECT pg_reload_conf(); -
I/Oタイミングデータが欠落している場合:タイミング収集を有効にします。
SHOW track_io_timing; -- 'on'である必要があります。クイック修正:
ALTER SYSTEM SET track_io_timing = 'on'; SELECT pg_reload_conf(); -
構成変更を適用する:
- 自己管理型:
postgresql.confに設定を追加し、サーバーを再起動します。 - 管理型サービス:
ALTER SYSTEM SET+SELECT pg_reload_conf()を使用します。 - 一時的なテスト:
SET parameter = valueを使用して、現在のセッションに設定を適用します。 - 統計を埋めるために、いくつかのデータベースアクティビティを生成します。
- 自己管理型:
パフォーマンス問題
limitパラメータを使用して、結果サイズを減らします。- オフピーク時間に監視を実行します。
- 分析を実行する前に、データベースの負荷を確認します。
バージョン互換性問題
詳細については、## ツール互換性マトリックスを参照してください。
-
最初に互換性チェックを実行します:
# "get_server_infoを使用して、バージョンと利用可能な機能を確認します。" -
機能の可用性を理解する:
- PostgreSQL 16 - 17:すべての機能が利用可能です。
- PostgreSQL 15+:別のチェックポインター統計が利用可能です。
- PostgreSQL 14+:並列クエリの追跡が可能です。
- PostgreSQL 12 - 13:コア機能のみが利用可能です。
-
ツールが「利用できません」と表示される場合:
- 機能には、より新しいPostgreSQLバージョンが必要です。
- ツールは自動的に最適な代替機能を使用します。
- 強化された監視のために、PostgreSQLをアップグレードすることを検討してください。
開発
テストと開発
# MCPインスペクターでテストする
./scripts/run-mcp-inspector-local.sh
# デバッグのための直接実行
python -m src.mcp_postgresql_ops.mcp_main --log-level DEBUG
# バージョン互換性をテストする(異なるPostgreSQLバージョンが必要)
# .env内のPOSTGRES_HOSTを異なるバージョンに向けるように変更する
# テストを実行する(追加した場合)
uv run pytest
バージョン互換性テスト
MCPサーバーは自動的にPostgreSQL 12 - 17のバージョンに適応します。バージョン間でテストするには:
- テストデータベースをセットアップする:異なるPostgreSQLバージョン(12、14、15、16、17)
- 互換性テストを実行する:各バージョンに向けてツールの動作を検証する
- 機能検出をチェックする:適切なバージョン検出と機能の可用性を確認する
- フォールバック動作を検証する:古いバージョンでの適切な劣化を確認する
📄 ライセンス
MITライセンスの下で自由に使用、変更、配布することができます。
⭐ その他のプロジェクト
同じ作者による他のMCPサーバー:
代替品















