postgres-code-review について
SQL、スキーマ、接続処理を点検する開発者向けのPostgreSQLコードレビュースキルです。確認リストと参照資料に加え、指摘を裏付ける証拠の要件を示します。
主な機能
- 01インデックスとクエリの確認項目
- 02JSONB演算子とインデックスの確認
- 03接続プールと接続解放の確認
- 04トランザクションとロックのレビュー
- 05指摘の証拠要件
活用シーン
- 01クエリとスキーマの性能レビュー
- 02JSONBクエリパターンの確認
- 03接続とプール処理の監査
- 04トランザクションとインジェクションリスクの評価
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill postgres-code-reviewインストール後、Claude Code で/postgres-code-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/connections.mdindexes.mdjsonb.mdtransactions.md詳細
PostgreSQL コードレビュー
クイックリファレンス
| 問題の種類 | 参照先 |
|---|---|
| インデックスの不足、誤ったインデックスの種類、クエリのパフォーマンス | references/indexes.md |
| JSONB クエリ、演算子、GIN インデックス | references/jsonb.md |
| 接続リーク、プールの設定、タイムアウト | references/connections.md |
| 分離レベル、デッドロック、アドバイザリロック | references/transactions.md |
レビューチェックリスト
- WHERE/JOIN の列に適切なインデックスがある
- 複合インデックスがクエリパターンに合っている(列の順序が重要)
- クエリで使用する JSONB 列に GIN インデックスを使用している
- 適切な JSONB 演算子(
->、->>、@>、?)を使用している - 接続プールが適切な上限で設定されている
- 接続が適切に解放されている(コンテキストマネージャー、try/finally)
- ユースケースに適したトランザクション分離レベルを使用している
- ロックを保持する長時間実行トランザクションがない
- アプリケーションレベルの調整にアドバイザリロックを使用している
- クエリでパラメーター化されたステートメントを使用している(SQL インジェクションがない)
報告前のゲート
結論を証拠に基づいたものにするため(「頭の中で確認した」ではなく)、次の手順を使用してください。
- 範囲 — レビュー対象の SQL、DDL/マイグレーション、接続コードについて、具体的なパス(必要に応じて行範囲やシンボルも)を記録します。合格条件: 指摘する各サブシステム(クエリ、JSONB、プール、トランザクション)に、少なくとも 1 つの参照パスがあること。
- パフォーマンスに関する指摘の SQL/DDL 引用 — インデックス、シーケンシャルスキャン、JSONB 演算子、実行計画に関する指摘では、該当するステートメントまたはスキーマを正確に示す必要があります(引用箇所または
file:line)。合格条件: そのような指摘に、それぞれ引用が含まれていること。 - インジェクションを指摘する前のバインド確認 — SQL と値の組み合わせ方(バインドパラメーターか、文字列連結/format/f-string か)を特定してから、SQL インジェクションのリスクを指摘してください。合格条件: 指摘する呼び出し箇所ごとに、コードで確認した仕組みを明記すること。
次に、クイックリファレンスから関連するリファレンスドキュメントを読み込み、レビューチェックリストを順に確認してください。
リファレンスを読み込むタイミング
- WHERE/JOIN を含む SELECT クエリをレビューする場合 → indexes.md
- JSONB 列または JSON 操作をレビューする場合 → jsonb.md
- データベース接続コードをレビューする場合 → connections.md
- BEGIN/COMMIT または同時更新をレビューする場合 → transactions.md
レビュー時の質問
- このクエリはインデックスを使用しますか、それともシーケンシャルスキャンを実行しますか?
- JSONB 操作では、適切な演算子とインデックスを使用していますか?
- データベース接続は適切に管理され、解放されていますか?
- この操作に適したトランザクション分離レベルですか?
- デッドロックや長時間のロックが発生する可能性はありますか?
コメント
Markdown 対応