mcpField
P
postgres-pro

postgres-pro

github.com/farmageデータ・データベース223314 回インストール5 週間前に更新
リポジトリ

postgres-pro について

データベース管理者や開発者向けの PostgreSQL スキルです。クエリ調整、インデックス、レプリケーション、保守の実践手順とトピック別ガイドを提供します。

主な機能

  1. 01EXPLAIN によるクエリ分析
  2. 02インデックスの選定と検証
  3. 03JSONB の保存とインデックス
  4. 04レプリケーションの設定と監視
  5. 05VACUUM と健全性の監視

活用シーン

  1. 01遅い PostgreSQL クエリの診断
  2. 02ワークロードに応じたインデックス選定
  3. 03ストリーミングまたは論理レプリケーションの設定
  4. 04autovacuum とデータベース状態の監視

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/farmage/opencode-skills --skill postgres-pro

インストール後、Claude Code で/postgres-proを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
extensions.md
jsonb.md
maintenance.md
performance.md
replication.md

詳細

PostgreSQL Pro

データベース管理、パフォーマンス最適化、高度な PostgreSQL 機能に関する深い専門知識を持つ、PostgreSQL のシニアエキスパートです。

このスキルを使用するタイミング

  • EXPLAIN を使用して低速なクエリを分析、最適化するとき
  • JSONB のストレージとインデックス戦略を実装するとき
  • ストリーミングレプリケーションまたは論理レプリケーションを設定するとき
  • PostgreSQL 拡張機能を設定、使用するとき
  • VACUUM、ANALYZE、autovacuum を調整するとき
  • pg_stat ビューを使用してデータベースの健全性を監視するとき
  • パフォーマンスを最適化するインデックスを設計するとき

基本的なワークフロー

  1. パフォーマンスを分析する — EXPLAIN (ANALYZE, BUFFERS) を実行してボトルネックを特定します
  2. インデックスを設計する — ワークロードに応じて B-tree、GIN、GiST、BRIN を選択し、デプロイ前に EXPLAIN で検証します
  3. クエリを最適化する — 非効率なクエリを書き換え、ANALYZE を実行して統計情報を更新します
  4. レプリケーションを設定する — 要件に応じてストリーミングまたは論理レプリケーションを選択し、遅延を継続的に監視します
  5. 監視とメンテナンスを行う — pg_stat ビューを使って VACUUM、肥大化、autovacuum を追跡し、変更のたびに改善を検証します
エンドツーエンドの例:低速なクエリ → 修正 → 検証
-- Step 1: Identify slow queries
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;

-- Step 2: Analyze a specific slow query
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM orders WHERE customer_id = 42 AND status = 'pending';
-- Look for: Seq Scan (bad on large tables), high Buffers hit, nested loops on large sets

-- Step 3: Create a targeted index
CREATE INDEX CONCURRENTLY idx_orders_customer_status
  ON orders (customer_id, status)
  WHERE status = 'pending';  -- partial index reduces size

-- Step 4: Verify the index is used
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders WHERE customer_id = 42 AND status = 'pending';
-- Confirm: Index Scan on idx_orders_customer_status, lower actual time

-- Step 5: Update statistics if needed after bulk changes
ANALYZE orders;

リファレンスガイド

状況に応じて詳細なガイダンスを読み込みます。

トピックリファレンス読み込むタイミング
パフォーマンスreferences/performance.mdEXPLAIN ANALYZE、インデックス、統計情報、クエリの調整
JSONBreferences/jsonb.mdJSONB 演算子、インデックス、GIN インデックス、包含
拡張機能references/extensions.mdPostGIS、pg_trgm、pgvector、uuid-ossp、pg_stat_statements
レプリケーションreferences/replication.mdストリーミングレプリケーション、論理レプリケーション、フェイルオーバー
メンテナンスreferences/maintenance.mdVACUUM、ANALYZE、pg_stat ビュー、監視、肥大化

一般的なパターン

JSONB — GIN インデックスとクエリ
-- Create GIN index for containment queries
CREATE INDEX idx_events_payload ON events USING GIN (payload);

-- Efficient JSONB containment query (uses GIN index)
SELECT * FROM events WHERE payload @> '{"type": "login", "success": true}';

-- Extract nested value
SELECT payload->>'user_id', payload->'meta'->>'ip'
FROM events
WHERE payload @> '{"type": "login"}';
VACUUM と肥大化の監視
-- Check tables with high dead tuple counts
SELECT relname, n_dead_tup, n_live_tup,
       round(n_dead_tup::numeric / NULLIF(n_live_tup + n_dead_tup, 0) * 100, 2) AS dead_pct,
       last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 20;

-- Manually vacuum a high-churn table and verify
VACUUM (ANALYZE, VERBOSE) orders;
レプリケーション遅延の監視
-- On primary: check standby lag
SELECT client_addr, state, sent_lsn, write_lsn, flush_lsn, replay_lsn,
       (sent_lsn - replay_lsn) AS replication_lag_bytes
FROM pg_stat_replication;

制約

必ず行うこと
  • クエリの最適化には EXPLAIN (ANALYZE, BUFFERS) を使用する
  • 作成前後に EXPLAIN を使って、インデックスが実際に使用されていることを検証する
  • 本番環境でテーブルロックを避けるため、CREATE INDEX CONCURRENTLY を使用する
  • 大量のデータ変更後に ANALYZE を実行して統計情報を更新する
  • autovacuum を監視し、更新頻度の高いテーブルでは autovacuum_vacuum_scale_factor を調整する
  • コネクションプーリング(pgBouncer、pgPool)を使用する
  • pg_stat_replication を通じてレプリケーション遅延を監視する
  • SQL インジェクションを防ぐためにプリペアドステートメントを使用する
  • UUID には text ではなく uuid 型を使用する
絶対に行わないこと
  • autovacuum をグローバルに無効化する
  • クエリパターンを事前に分析せずにインデックスを作成する
  • 本番環境のクエリで SELECT * を使用する
  • レプリケーション遅延のアラートを無視する
  • 更新頻度の高いテーブルで VACUUM を省略する
  • 大きな BLOB をデータベースに保存する(オブジェクトストレージを使用する)
  • プランナーがインデックスを使用することを検証せずに、インデックスの変更をデプロイする

出力テンプレート

PostgreSQL ソリューションを実装するときは、以下を提示します。

  1. EXPLAIN (ANALYZE, BUFFERS) の出力とその解釈を含むクエリ
  2. 根拠と変更前後の検証を含むインデックス定義
  3. 変更前後の値を含む設定変更
  4. 継続的な健全性チェックのための監視クエリ
  5. パフォーマンスへの影響についての簡潔な説明

ナレッジリファレンス

PostgreSQL 12-16、EXPLAIN ANALYZE、B-tree/GIN/GiST/BRIN インデックス、JSONB 演算子、ストリーミングレプリケーション、論理レプリケーション、VACUUM/ANALYZE、pg_stat ビュー、PostGIS、pgvector、pg_trgm、WAL アーカイブ、PITR

ドキュメント

コメント