TaskFlow – PostgreSQL + Docker Öğrenme Projesi
Amaç:
PostgreSQL'in temellerini (şema, constraint, trigger, view, mview, index, full-text search, transaction) gerçek bir örnek proje üzerinden öğrenmek.
1. Başlangıç
Docker PostgreSQL Container Çalıştırma
docker run --name pg16 \
-e POSTGRES_USER=dev \
-e POSTGRES_PASSWORD=devpass \
-e POSTGRES_DB=taskflow \
-p 5432:5432 \
-d postgres:16
PostgreSQL’e bağlan
docker exec -it pg16 psql -U dev -d taskflow
2. Veritabanı Şeması
Şema: app
Tablo Amaç
users Kullanıcı bilgileri
statuses Görev durum sözlüğü
tasks Görevler (öncelik, tarih, kullanıcı, durum)
comments Görevlere yapılan yorumlar
task_audit Durum değişim logları
3. Örnek SQL Komutları
Şema ve tabloların oluşturulması
01_schema.sql
CREATE SCHEMA app;
CREATE TABLE app.users (...);
CREATE TABLE app.statuses (...);
CREATE TABLE app.tasks (...);
CREATE TABLE app.comments (...);
Örnek veri ekleme
02_sample_data.sql
INSERT INTO app.users(email,full_name) VALUES
('ada@example.com','Ada Lovelace'),
('grace@example.com','Grace Hopper');
4. Görünümler (Views)
4.1 v_task_summary
Görev + kullanıcı + yorum sayısı özet görünümü
Her sorguda canlı veri çeker.
CREATE OR REPLACE VIEW app.v_task_summary AS ...
4.2 mv_open_tasks_per_user
Kullanıcı başına açık görev sayısını önceden hesaplar.
CREATE MATERIALIZED VIEW app.mv_open_tasks_per_user AS ...
REFRESH MATERIALIZED VIEW app.mv_open_tasks_per_user;
5. Trigger ve Fonksiyonlar
trg_tasks_updated_at
Güncelleme sonrası updated_at kolonunu otomatik günceller.
trg_tasks_status_audit
Görev durumu değiştiğinde task_audit tablosuna kayıt ekler.
6. Full-Text Search (FTS)
ALTER TABLE app.tasks
ADD COLUMN search_tsv tsvector GENERATED ALWAYS AS (
setweight(to_tsvector('simple', coalesce(title,'')), 'A') ||
setweight(to_tsvector('simple', coalesce(description,'')), 'B')
) STORED;
CREATE INDEX idx_tasks_search ON app.tasks USING GIN(search_tsv);
Arama örneği:
SELECT task_id, title
FROM app.tasks
WHERE search_tsv @@ plainto_tsquery('simple', 'trigger arama');
7. Transaction Örneği
BEGIN;
UPDATE app.tasks SET status_code='done' WHERE task_id=1;
INSERT INTO app.comments(task_id,author_id,body)
VALUES (1,2,'Tamamlandı olarak işaretlendi');
COMMIT;
8. Dosya Yapısı
taskflow-postgres
┣ 01_schema.sql
┣ 02_sample_data.sql
┣ 03_views_mviews.sql
┣ 04_triggers.sql
┣ 05_indexes_fts.sql
┣ 06_transactions.sql
┗ README.md
9. Öğrenilen Kavramlar
CHECK, DEFAULT, FOREIGN KEY, ON DELETE
VIEW vs MATERIALIZED VIEW
TRIGGER, PL/pgSQL fonksiyonları
GIN, BTREE index türleri
Transaction yapısı (BEGIN, COMMIT, ROLLBACK)
10. Docker Komutları
Komut Açıklama
docker ps Çalışan container’lar
docker logs pg16 Log’ları gör
docker exec -it pg16 bash Container içine gir
docker stop pg16 / docker start pg16 Durdur / başlat
docker rm -f pg16 Tamamen sil
11. Geliştirici
Hazırlayan: Hatice Nur Aktoğan