mcpField
P
postgresql

postgresql

github.com/iliaalデータ・データベース45197 回インストール6 日前に更新
リポジトリ

postgresql について

postgresqlは、PostgreSQLのスキーマ設計、マイグレーション、クエリ、運用に関する指針を提供するスキルです。データの忠実性、安全なリリース、並行処理に配慮し、代表的な実行計画でクエリの挙動を検証します。

主な機能

  1. 01PostgreSQLのデータ型選択
  2. 02安全なスキーマ変更とマイグレーション計画
  3. 03生バイトとロールバックの来歴保持
  4. 04ロックと並行更新の確認
  5. 05クエリプランとインデックスの分析

活用シーン

  1. 01テーブルと制約の設計
  2. 02データのバックフィルの実装やレビュー
  3. 03インデックスとクエリパターンの最適化
  4. 04マイグレーションのロックとロールバックリスク評価

インストール

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

$npx skills add https://github.com/iliaal/ai-skills --skill postgresql

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

同梱ファイル

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

SPEC.md
references/
concurrency-patterns.md
full-text-search.md
operations.md
performance-patterns.md
query-and-index-patterns.md
schema-and-migrations.md
security-and-operations.md

詳細

PostgreSQL

作業ルール

  • 忠実性が重要な場合は、未加工のバイト列をバイト列のまま保持し、クエリ用には別途、解析済みの型を選択します。
  • デプロイ済みのマイグレーションは不変として扱い、ロールアウト中に旧バージョンと新バージョンのアプリケーションが共存することを考慮します。
  • データのロールバックには来歴情報が必要です。 移行先の値で行を選択すると、フォワードマイグレーションが変更していない行も選択される可能性があります。可逆性が必要な場合は、後続の書き込みに関する明示的なポリシーを定めたうえで、影響を受けた行の識別情報と元の値を保持します。復元したデータを、それを読み取るアプリケーションバージョンで検証します。
  • ロックの継続時間とトランザクションの範囲を確認し、読み取り・変更・書き込みの処理を同時更新から保護します。
  • インデックスの述語と NULL の意味を、すべての書き込み処理およびマイグレーションクエリに合わせます。
  • 代表的なデータと実際の実行計画を使ってクエリの変更を測定し、データベース上の結果を使って不変条件を検証します。

データ型のデフォルト

用途使用する型避ける型
主キーBIGINT GENERATED ALWAYS AS IDENTITYSERIAL、BIGSERIAL
タイムスタンプTIMESTAMPTZTIMESTAMP(タイムゾーンが失われます)
テキストTEXT制約が必要な場合を除く VARCHAR(n)
金額NUMERIC(precision, scale)MONEY、FLOAT
真偽値NOT NULL DEFAULT を指定した BOOLEANNULL を許容する真偽値
JSONJSONBJSON(インデックスを作成できません)、テキスト形式の JSON
UUIDgen_random_uuid()(PG13 以降)uuid-ossp 拡張機能
IP アドレスINET / CIDRテキスト
範囲TSTZRANGE、INT4RANGE など2 つのカラムの組み合わせ
未加工バイト列(ペイロードをそのまま保持)BYTEAJSONB、TEXT(どちらも再エンコードされます)

仕様で「未加工のレスポンスを記録する」とされている場合、バイト列の忠実な保持が求められます。これを実現できるテキスト型はありません。JSONB は再解析されるため、重要でない空白が除去され、オブジェクトのキーがソートされ、重複するキーは最後のものだけが残り、指数表記の数値(1e0 → 1)は書き換えられます(1.00 の末尾のゼロは保持されるため、「すべての数値表記が同一になる」と言うのは誇張です)。JSON 以外の本文は保存できず、通常は NULL になります。TEXT は NUL バイトと、データベースのエンコーディングで無効なバイト列を拒否するため、バイナリ形式または不正なエンコーディングの本文は保存されずにエラーになります。バイト列は BYTEA に保存し、その横にコンテンツタイプを保持します。クエリで必要な場合は、解析済みの JSONB カラムを別途追加します。カラムの型だけを根拠に本文が保持されていると判断するのは、レビュー上の誤りです。

検証

変更したクエリの調査は EXPLAIN から始めます。クエリの実行とその副作用が許可され、安全な場合に限り、代表的なデータを使って EXPLAIN (ANALYZE, BUFFERS) を実行します。書き込みの場合は使い捨てデータを優先します。関連するすべての作用がトランザクション対象である場合に限り、トランザクションを実行してからロールバックします。想定外のシーケンシャルスキャンを調査し、実際のコストを比較します。テーブルの大部分を読み取るには、インデックスを使うよりシーケンシャルスキャンのほうが効率的な場合があります。完了と判断する前に、インデックスのない外部キー列がないことを確認します。

タスク別の参考資料

実装またはレビューする動作に該当する参考資料を、作業前に読んでください。

  • テーブル設計、制約、スキーマ変更、バックフィルについては、schema-and-migrations.md を参照してください。
  • インデックス、クエリプラン、JSONB、ページネーション、クエリのアンチパターンについては、query-and-index-patterns.md を参照してください。
  • RLS、トランザクション境界、ロック、パーティショニング、接続プーリング、運用機能については、security-and-operations.md を参照してください。

該当するトピックに応じて、以下の既存の専門的な参考資料も参照してください。

コメント