Postgres Patterns

affaan-m/ECC/docs/tr/skills/postgres-patterns

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

Sorgu optimizasyonu, şema tasarımı, indeksleme ve güvenlik için PostgreSQL veritabanı kalıpları. Supabase en iyi uygulamalarına dayanır.

Instructions onlyData & Analytics
AI-generated overview

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

What it does
A quick-reference guide to 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, covering and partial indexes, RLS policies, upserts, cursor pagination and queue processing. It also lists diagnostic queries for unindexed foreign keys, slow queries and table bloat, plus connection and timeout settings.
When to use it
Use it while writing SQL queries or migrations, designing database schemas, troubleshooting slow queries, implementing Row Level Security, or setting up connection pooling.
Requirements
No scripts or tooling are included; it is instructions and SQL snippets only. Applying the diagnostic queries requires a PostgreSQL database, and some examples reference pg_stat_statements and Supabase-style auth functions.

PostgreSQL Kalıpları

PostgreSQL en iyi uygulamaları için hızlı referans. Detaylı kılavuz için database-reviewer agent'ını kullanın.

Ne Zaman Aktifleştirmeli

  • SQL sorguları veya migration'lar yazarken
  • Veritabanı şemaları tasarlarken
  • Yavaş sorguları troubleshoot ederken
  • Row Level Security uygularken
  • Connection pooling kurarken

Hızlı Referans

İndeks Hile Sayfası

Sorgu Kalıbıİndeks TipiÖrnek
WHERE col = valueB-tree (varsayılan)CREATE INDEX idx ON t (col)
WHERE col > valueB-treeCREATE INDEX idx ON t (col)
WHERE a = x AND b > yCompositeCREATE 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)
Zaman serisi aralıklarıBRINCREATE INDEX idx ON t USING brin (col)

Veri Tipi Hızlı Referans

Kullanım SenaryosuDoğru TipKaçın
ID'lerbigintint, rastgele UUID
String'lertextvarchar(255)
Timestamp'lertimestamptztimestamp
Paranumeric(10,2)float
Flag'lerbooleanvarchar, int

Yaygın Kalıplar

Composite İndeks Sırası:

sql
-- Önce eşitlik sütunları, sonra aralık sütunlarıCREATE INDEX idx ON orders (status, created_at);-- Şunlar için çalışır: WHERE status = 'pending' AND created_at > '2024-01-01'

Covering İndeks:

sql
CREATE INDEX idx ON users (email) INCLUDE (name, created_at);-- SELECT email, name, created_at için tablo aramasını önler

Partial İndeks:

sql
CREATE INDEX idx ON users (email) WHERE deleted_at IS NULL;-- Daha küçük indeks, sadece aktif kullanıcıları içerir

RLS Policy (Optimize Edilmiş):

sql
CREATE POLICY policy ON orders  USING ((SELECT auth.uid()) = user_id);  -- SELECT'e sar!

UPSERT:

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

Cursor Sayfalama:

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

Kuyruk İşleme:

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

Anti-Kalıp Tespiti

sql
-- İndekslenmemiş foreign key'leri bulSELECT 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)  );
-- Yavaş sorguları bulSELECT query, mean_exec_time, callsFROM pg_stat_statementsWHERE mean_exec_time > 100ORDER BY mean_exec_time DESC;
-- Tablo bloat'ını kontrol etSELECT relname, n_dead_tup, last_vacuumFROM pg_stat_user_tablesWHERE n_dead_tup > 1000ORDER BY n_dead_tup DESC;

Yapılandırma Şablonu

sql
-- Bağlantı limitleri (RAM için ayarla)ALTER SYSTEM SET max_connections = 100;ALTER SYSTEM SET work_mem = '8MB';
-- Timeout'larALTER SYSTEM SET idle_in_transaction_session_timeout = '30s';ALTER SYSTEM SET statement_timeout = '30s';
-- İzlemeCREATE EXTENSION IF NOT EXISTS pg_stat_statements;
-- Güvenlik varsayılanlarıREVOKE ALL ON SCHEMA public FROM public;
SELECT pg_reload_conf();

İlgili

  • Agent: database-reviewer - Tam veritabanı inceleme iş akışı
  • Skill: clickhouse-io - ClickHouse analytics kalıpları
  • Skill: backend-patterns - API ve backend kalıpları

Supabase Agent Skills'e dayanır (kredi: Supabase ekibi) (MIT License)

Source and attribution

Source:affaan-m/ECCindocs/tr/skills/postgres-patternsat commitef648e0

License: No license

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

Report or request removal