Skip to content

Repository files navigation

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

About

TaskFlow, Docker üzerinde PostgreSQL 16 kullanarak görev yönetim sistemi veritabanı oluşturmayı öğretir. Tablolar, triggerlar, view’lar ve transaction örnekleriyle PostgreSQL’in temel ve ileri düzey kavramlarını uygulamalı olarak öğrenmeyi amaçlayan öğretici bir projedir.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages