jpskill.com
💬 コミュニケーション コミュニティ 🔴 エンジニア向け 👤 エンジニア・AI開発者

💬 Postgres Patterns

postgres-patterns

Postgres Patterns の設計パターン集Skill。メール・Slack等のやりとりをする人向け。

⏱ メール返信10件 30分 → 3分

📺 まず動画で見る(YouTube)

▶ 【最新版】Claude(クロード)完全解説!20以上の便利機能をこの動画1本で全て解説 ↗

※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。

📜 元の英語説明(参考)

PostgreSQL database patterns for query optimization, schema design, indexing, and security. Quick reference for common patterns, index types, data types, and anti-pattern detection. Based on Supabase best practices.

🇯🇵 日本人クリエイター向け解説

一言でいうと

Postgres Patterns の設計パターン集Skill。メール・Slack等のやりとりをする人向け。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o postgres-patterns.zip https://jpskill.com/download/573.zip && unzip -o postgres-patterns.zip && rm postgres-patterns.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/573.zip -OutFile "$d\postgres-patterns.zip"; Expand-Archive "$d\postgres-patterns.zip" -DestinationPath $d -Force; ri "$d\postgres-patterns.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して postgres-patterns.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → postgres-patterns フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-18
同梱ファイル
1

💬 こう話しかけるだけ — サンプルプロンプト

  • Postgres Patterns を使って、最小構成のサンプルコードを示して
  • Postgres Patterns の主な使い方と注意点を教えて
  • Postgres Patterns を既存プロジェクトに組み込む方法を教えて

これをClaude Code に貼るだけで、このSkillが自動発動します。

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

PostgreSQL パターン

PostgreSQL のベストプラクティスに関するクイックリファレンスです。詳細なガイダンスについては、database-reviewer エージェントをご利用ください。

アクティベートするタイミング

  • SQL クエリやマイグレーションを作成する際
  • データベーススキーマを設計する際
  • 遅いクエリのトラブルシューティングを行う際
  • 行レベルセキュリティを実装する際
  • コネクションプーリングを設定する際

クイックリファレンス

インデックス早見表

クエリパターン インデックスタイプ
WHERE col = value B-tree (デフォルト) CREATE INDEX idx ON t (col)
WHERE col > value B-tree CREATE INDEX idx ON t (col)
WHERE a = x AND b > y 複合 CREATE INDEX idx ON t (a, b)
WHERE jsonb @> '{}' GIN CREATE INDEX idx ON t USING gin (col)
WHERE tsv @@ query GIN CREATE INDEX idx ON t USING gin (col)
時系列範囲 BRIN CREATE INDEX idx ON t USING brin (col)

データ型クイックリファレンス

ユースケース 正しい型 避けるべき型
ID bigint int, ランダムな UUID
文字列 text varchar(255)
タイムスタンプ timestamptz timestamp
金額 numeric(10,2) float
フラグ boolean varchar, int

一般的なパターン

複合インデックスの順序:

-- 等価条件のカラムを最初に、次に範囲条件のカラム
CREATE INDEX idx ON orders (status, created_at);
-- 以下の場合に機能します: WHERE status = 'pending' AND created_at > '2024-01-01'

カバリングインデックス:

CREATE INDEX idx ON users (email) INCLUDE (name, created_at);
-- SELECT email, name, created_at のためのテーブルルックアップを回避します

部分インデックス:

CREATE INDEX idx ON users (email) WHERE deleted_at IS NULL;
-- より小さいインデックスで、アクティブなユーザーのみを含みます

RLS ポリシー (最適化済み):

CREATE POLICY policy ON orders
  USING ((SELECT auth.uid()) = user_id);  -- SELECT で囲む!

UPSERT:

INSERT INTO settings (user_id, key, value)
VALUES (123, 'theme', 'dark')
ON CONFLICT (user_id, key)
DO UPDATE SET value = EXCLUDED.value;

カーソルページネーション:

SELECT * FROM products WHERE id > $last_id ORDER BY id LIMIT 20;
-- O(1) ですが、OFFSET は O(n) です

キュー処理:

UPDATE jobs SET status = 'processing'
WHERE id = (
  SELECT id FROM jobs WHERE status = 'pending'
  ORDER BY created_at LIMIT 1
  FOR UPDATE SKIP LOCKED
) RETURNING *;

アンチパターン検出

-- インデックスのない外部キーを検索
SELECT conrelid::regclass, a.attname
FROM pg_constraint c
JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey)
WHERE c.contype = 'f'
  AND NOT EXISTS (
    SELECT 1 FROM pg_index i
    WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey)
  );

-- 遅いクエリを検索
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC;

-- テーブルの肥大化をチェック
SELECT relname, n_dead_tup, last_vacuum
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY n_dead_tup DESC;

設定テンプレート

-- 接続制限 (RAM に合わせて調整)
ALTER SYSTEM SET max_connections = 100;
ALTER SYSTEM SET work_mem = '8MB';

-- タイムアウト
ALTER SYSTEM SET idle_in_transaction_session_timeout = '30s';
ALTER SYSTEM SET statement_timeout = '30s';

-- 監視
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

-- セキュリティのデフォルト設定
REVOKE ALL ON SCHEMA public FROM public;

SELECT pg_reload_conf();

関連

  • エージェント: database-reviewer - 完全なデータベースレビューワークフロー
  • スキル: backend-patterns - API およびバックエンドパターン
  • スキル: database-migrations - 安全なスキーマ変更

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

  • SQL クエリを作成する際
  • データベーススキーマを設計する際
  • クエリパフォーマンスを最適化する際
  • 行レベルセキュリティを実装する際
  • データベースの問題をトラブルシューティングする際
  • PostgreSQL の設定を行う際

Supabase Agent Skills に基づく (クレジット: Supabase チーム) (MIT ライセンス)

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

PostgreSQL Patterns

Quick reference for PostgreSQL best practices. For detailed guidance, use the database-reviewer agent.

When to Activate

  • Writing SQL queries or migrations
  • Designing database schemas
  • Troubleshooting slow queries
  • Implementing Row Level Security
  • Setting up connection pooling

Quick Reference

Index Cheat Sheet

Query Pattern Index Type Example
WHERE col = value B-tree (default) CREATE INDEX idx ON t (col)
WHERE col > value B-tree CREATE INDEX idx ON t (col)
WHERE a = x AND b > y Composite CREATE INDEX idx ON t (a, b)
WHERE jsonb @> '{}' GIN CREATE INDEX idx ON t USING gin (col)
WHERE tsv @@ query GIN CREATE INDEX idx ON t USING gin (col)
Time-series ranges BRIN CREATE INDEX idx ON t USING brin (col)

Data Type Quick Reference

Use Case Correct Type Avoid
IDs bigint int, random UUID
Strings text varchar(255)
Timestamps timestamptz timestamp
Money numeric(10,2) float
Flags boolean varchar, int

Common Patterns

Composite Index Order:

-- Equality columns first, then range columns
CREATE INDEX idx ON orders (status, created_at);
-- Works for: WHERE status = 'pending' AND created_at > '2024-01-01'

Covering Index:

CREATE INDEX idx ON users (email) INCLUDE (name, created_at);
-- Avoids table lookup for SELECT email, name, created_at

Partial Index:

CREATE INDEX idx ON users (email) WHERE deleted_at IS NULL;
-- Smaller index, only includes active users

RLS Policy (Optimized):

CREATE POLICY policy ON orders
  USING ((SELECT auth.uid()) = user_id);  -- Wrap in SELECT!

UPSERT:

INSERT INTO settings (user_id, key, value)
VALUES (123, 'theme', 'dark')
ON CONFLICT (user_id, key)
DO UPDATE SET value = EXCLUDED.value;

Cursor Pagination:

SELECT * FROM products WHERE id > $last_id ORDER BY id LIMIT 20;
-- O(1) vs OFFSET which is O(n)

Queue Processing:

UPDATE jobs SET status = 'processing'
WHERE id = (
  SELECT id FROM jobs WHERE status = 'pending'
  ORDER BY created_at LIMIT 1
  FOR UPDATE SKIP LOCKED
) RETURNING *;

Anti-Pattern Detection

-- Find unindexed foreign keys
SELECT conrelid::regclass, a.attname
FROM pg_constraint c
JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey)
WHERE c.contype = 'f'
  AND NOT EXISTS (
    SELECT 1 FROM pg_index i
    WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey)
  );

-- Find slow queries
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC;

-- Check table bloat
SELECT relname, n_dead_tup, last_vacuum
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY n_dead_tup DESC;

Configuration Template

-- Connection limits (adjust for RAM)
ALTER SYSTEM SET max_connections = 100;
ALTER SYSTEM SET work_mem = '8MB';

-- Timeouts
ALTER SYSTEM SET idle_in_transaction_session_timeout = '30s';
ALTER SYSTEM SET statement_timeout = '30s';

-- Monitoring
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

-- Security defaults
REVOKE ALL ON SCHEMA public FROM public;

SELECT pg_reload_conf();

Related

  • Agent: database-reviewer - Full database review workflow
  • Skill: backend-patterns - API and backend patterns
  • Skill: database-migrations - Safe schema changes

When to Use This Skill

  • Writing SQL queries
  • Designing database schemas
  • Optimizing query performance
  • Implementing Row Level Security
  • Troubleshooting database issues
  • Setting up PostgreSQL configuration

Based on Supabase Agent Skills (credit: Supabase team) (MIT License)