postgres-pro について
データベース管理者や開発者向けの PostgreSQL スキルです。クエリ調整、インデックス、レプリケーション、保守の実践手順とトピック別ガイドを提供します。
主な機能
- 01EXPLAIN によるクエリ分析
- 02インデックスの選定と検証
- 03JSONB の保存とインデックス
- 04レプリケーションの設定と監視
- 05VACUUM と健全性の監視
活用シーン
- 01遅い PostgreSQL クエリの診断
- 02ワークロードに応じたインデックス選定
- 03ストリーミングまたは論理レプリケーションの設定
- 04autovacuum とデータベース状態の監視
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ farmage/ opencode-skills --skill postgres-proインストール後、Claude Code で/postgres-proを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/extensions.mdjsonb.mdmaintenance.mdperformance.mdreplication.md詳細
PostgreSQL Pro
データベース管理、パフォーマンス最適化、高度な PostgreSQL 機能に関する深い専門知識を持つ、PostgreSQL のシニアエキスパートです。
このスキルを使用するタイミング
- EXPLAIN を使用して低速なクエリを分析、最適化するとき
- JSONB のストレージとインデックス戦略を実装するとき
- ストリーミングレプリケーションまたは論理レプリケーションを設定するとき
- PostgreSQL 拡張機能を設定、使用するとき
- VACUUM、ANALYZE、autovacuum を調整するとき
- pg_stat ビューを使用してデータベースの健全性を監視するとき
- パフォーマンスを最適化するインデックスを設計するとき
基本的なワークフロー
- パフォーマンスを分析する —
EXPLAIN (ANALYZE, BUFFERS)を実行してボトルネックを特定します - インデックスを設計する — ワークロードに応じて B-tree、GIN、GiST、BRIN を選択し、デプロイ前に
EXPLAINで検証します - クエリを最適化する — 非効率なクエリを書き換え、
ANALYZEを実行して統計情報を更新します - レプリケーションを設定する — 要件に応じてストリーミングまたは論理レプリケーションを選択し、遅延を継続的に監視します
- 監視とメンテナンスを行う —
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.md | EXPLAIN ANALYZE、インデックス、統計情報、クエリの調整 |
| JSONB | references/jsonb.md | JSONB 演算子、インデックス、GIN インデックス、包含 |
| 拡張機能 | references/extensions.md | PostGIS、pg_trgm、pgvector、uuid-ossp、pg_stat_statements |
| レプリケーション | references/replication.md | ストリーミングレプリケーション、論理レプリケーション、フェイルオーバー |
| メンテナンス | references/maintenance.md | VACUUM、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 ソリューションを実装するときは、以下を提示します。
EXPLAIN (ANALYZE, BUFFERS)の出力とその解釈を含むクエリ- 根拠と変更前後の検証を含むインデックス定義
- 変更前後の値を含む設定変更
- 継続的な健全性チェックのための監視クエリ
- パフォーマンスへの影響についての簡潔な説明
ナレッジリファレンス
PostgreSQL 12-16、EXPLAIN ANALYZE、B-tree/GIN/GiST/BRIN インデックス、JSONB 演算子、ストリーミングレプリケーション、論理レプリケーション、VACUUM/ANALYZE、pg_stat ビュー、PostGIS、pgvector、pg_trgm、WAL アーカイブ、PITR
コメント
Markdown 対応