Postgres Patterns

affaan-m/ECC/docs/ja-JP/skills/postgres-patterns

by affaan-mef648e01899ba3e8dc6371642deaaf64b4477775No license275K starsListed Oct 9, 2026Updated Oct 9, 2026Repository updated 4 days ago

PostgreSQL database patterns for query optimization, schema design, indexing, and security. Based on Supabase best practices.

AI-generated overview

PostgreSQL reference patterns for query optimization, schema design, indexing, and security.

What it does
This skill is a quick-reference guide for PostgreSQL best practices, covering index selection, data type choices, common query patterns, anti-pattern detection queries, and configuration templates. It provides SQL snippets for composite and covering indexes, partial indexes, RLS policies, upserts, cursor pagination, and queue processing. It also lists diagnostic queries for missing foreign-key indexes, slow queries, and table bloat. It produces guidance and example SQL rather than running anything itself.
When to use it
Use it when writing SQL queries or migrations, designing a database schema, troubleshooting slow queries, implementing Row Level Security, or configuring connection pooling. It is meant as a lookup reference during database work.
Requirements
No scripts or runtime dependencies; it is instructions and SQL examples only. Applying the examples requires a PostgreSQL database, and some diagnostic queries assume extensions such as pg_stat_statements.

PostgreSQL パターン

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

起動タイミング

  • SQLクエリまたはマイグレーションの作成時
  • データベーススキーマの設計時
  • 低速クエリのトラブルシューティング時
  • Row Level Securityの実装時
  • コネクションプーリングの設定時

クイックリファレンス

インデックスチートシート

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

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

用途正しいタイプ避けるべき
IDbigintint、ランダムUUID
文字列textvarchar(255)
タイムスタンプtimestamptztimestamp
金額numeric(10,2)float
フラグbooleanvarchar、int

一般的なパターン

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

sql
-- 等価列を最初に、次に範囲列CREATE INDEX idx ON orders (status, created_at);-- 次の場合に機能: WHERE status = 'pending' AND created_at > '2024-01-01'

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

sql
CREATE INDEX idx ON users (email) INCLUDE (name, created_at);-- SELECT email, name, created_at のテーブル検索を回避

部分インデックス:

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

RLSポリシー(最適化):

sql
CREATE POLICY policy ON orders  USING ((SELECT auth.uid()) = user_id);  -- SELECTでラップ!

UPSERT:

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

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

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

キュー処理:

sql
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 *;

アンチパターン検出

sql
-- インデックスのない外部キーを検索SELECT conrelid::regclass, a.attnameFROM pg_constraint cJOIN 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, callsFROM pg_stat_statementsWHERE mean_exec_time > 100ORDER BY mean_exec_time DESC;
-- テーブル肥大化をチェックSELECT relname, n_dead_tup, last_vacuumFROM pg_stat_user_tablesWHERE n_dead_tup > 1000ORDER BY n_dead_tup DESC;

設定テンプレート

sql
-- 接続制限(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();

関連

  • Agent: database-reviewer - 完全なデータベースレビューワークフロー
  • Skill: clickhouse-io - ClickHouse分析パターン
  • Skill: backend-patterns - APIとバックエンドパターン

[Supabase Agent Skills](Supabase Agent Skills (credit: Supabase team))(MITライセンス)に基づく

Source and attribution

Source:affaan-m/ECCindocs/ja-JP/skills/postgres-patternsat commitef648e0

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal