# PostgreSQL geliştiricisi — 2010'dan beri

> PostgreSQL ile çalışıyorum: kuyruk tablosu ve index davranışı ölçümleri, partial index, pgvector ile vektör arama ve ilişkisel depo kararları.

- Öne çıkanlar: 16 yıl
- Deneyim: 2010'den bu yana
- Güncelleme: 2026-11-08
- Kaynak: https://muhammetsafak.com/tr/uzmanlik/postgresql/
- Dil: tr-TR
- Yazar: Muhammet Şafak

---
## PostgreSQL ekosisteminde ben

PostgreSQL benim için bir depo seçiminden çok, bir ölçüm yüzeyi. İndex ve kuyruk tablosu davranışı üzerine yayımladığım ölçümler bir benchmark'a ve açıklanan bir ortama dayanıyor; "genellikle şöyle olur" cümlesi yerine ne ölçtüğümü ve nerede bozulduğunu yazıyorum. Ölçümler [Research bölümünde](https://muhammetsafak.com/tr/research/partial-index-kuyruk-tablosu/): partial index, bloat ve autovacuum, planner'ın generic plana geçip geçmediği.

Bu işin mimari tarafı [Yazılım Mimarisi](https://muhammetsafak.com/tr/uzmanlik/architecture/) sayfasındaki çerçeveye bağlanıyor: yeni bir veri deposu eklemek bir karar, işletilecek bir sistem daha. Backend tarafında ise [Backend](https://muhammetsafak.com/tr/uzmanlik/backend/) rolünde şema ve sorgu tasarımının gündelik parçası.

MySQL'le daha uzun çalıştım; PostgreSQL'e dair söylediklerim yalnız PostgreSQL üzerinde yaptığım ölçümlerden geliyor.

## PostgreSQL Geliştirici nedir?

PostgreSQL, SQL dilini genişleten, açık kaynaklı bir nesne-ilişkisel veritabanı sistemidir; ACID uyumludur, çok sürümlü eşzamanlılık denetimi (MVCC) kullanır ve eklentilerle genişletilebilir. PostgreSQL geliştiricisi, şemayı, sorguyu ve index'i bu sistemin davranışına göre tasarlayan kişidir.

## PostgreSQL Geliştirici ne iş yapar?

PostgreSQL'de şema, sorgu ve index tasarlıyorum; özellikle kuyruk tablosu gibi çok güncellenen tablolarda index ve vacuum davranışını ölçüyorum. Vektör aramayı ayrı bir depoya taşımadan pgvector ile PostgreSQL içinde tutabildiğim yerde tutuyorum. Yeni bir veri deposu eklemeden önce PostgreSQL'in kendi araçlarının nerede yettiğine bakıyorum.

## Birlikte kullandığım teknolojiler

- PostgreSQL: Kuyruk tablosu ve index davranışını üzerinde ölçtüğüm veritabanı.
- pgvector: Vektör aramasını ayrı bir depoya taşımadan PostgreSQL içinde tutan eklenti.
- MySQL: En uzun süre birlikte çalıştığım ilişkisel depo.
- Redis: Önbellek, sayaç ve kısa ömürlü kilit.
- RabbitMQ: Servisler arası asenkron teslim; outbox relay'inin çıkış kapısı.
- Elasticsearch: İlişkiselin yetmediği yer: tam metin arama ve log analizi.
- Docker: Geliştirme ortamı ve dağıtım paketi.

## Bu alanda sorulanlar

- [Read replica gecikmesi yüzünden kullanıcı kendi yazdığı veriyi göremiyor; bunu uygulama tarafında nasıl çözerim?](https://muhammetsafak.com/tr/sor-bakalim/read-replica-gecikmesi-yuzunden-kullanici-yazdigi-veriyi-goremiyor/) (2026-11-03)
- [JSONB kolonundaki alanlarda filtrelemek için GIN index mi yoksa generated column mı tercih etmeliyim?](https://muhammetsafak.com/tr/sor-bakalim/jsonb-kolonundaki-alanlarda-filtrelemek-gin-index-generated-column/) (2026-10-06)
- [Heap erişimini önlemek ve index-only scan almak için covering index'e (INCLUDE) ne zaman geçmeliyim?](https://muhammetsafak.com/tr/sor-bakalim/index-only-scan-covering-indexe-ne-zaman-gecmeliyim/) (2026-09-08)

## Sık sorulanlar

### PostgreSQL ile kaç yıldır çalışıyorsun?

2010'dan bu yana, 16 yıldır.

### PostgreSQL geliştirici ne iş yapar?

PostgreSQL üzerinde şema, sorgu ve index tasarlar; veritabanının davranışını bilerek uygulamayı ona göre kurar. Bende bu; kuyruk tablosu gibi yoğun güncellenen tablolarda index ve vacuum davranışını ölçmek ve vektör aramayı gerektiği yerde PostgreSQL içinde tutmak demek.

### PostgreSQL ile MySQL arasında nasıl seçiyorsun?

MySQL en uzun süre birlikte çalıştığım ilişkisel depo; kuyruk tablosu ve index ölçümlerimi ise PostgreSQL üzerinde yaptım. Elimdeki ölçümler PostgreSQL'e ait, MySQL için aynı iddiayı kurmuyorum. Seçimi marka değil, iş yükü ve ekibin bilgisi belirliyor.

### Kuyruk tablosunda partial index kullanıyor musun?

Ölçtüm: partial index, kuyruk tablosunda index boyutunu belirgin biçimde küçültüyor, ama bu planner'ın onu seçmesine bağlı. Bloat ve autovacuum davranışını ve planner'ın generic plana geçip geçmediğini de ayrı ayrı ölçtüm. Bulguların hepsi [Research bölümünde](https://muhammetsafak.com/tr/research/partial-index-kuyruk-tablosu/).

### Vektör arama için ayrı bir veritabanı şart mı?

Her zaman değil. pgvector, vektör aramasını ayrı bir depoya taşımadan PostgreSQL içinde tutuyor. Büyük embedding koleksiyonlarında ise Milvus gibi dağıtık bir vektör veritabanına bakıyorum.

### Outbox tablosunu poll ederek mi yoksa Debezium CDC ile mi yayınlıyorsun?

SKIP LOCKED, batch ve partial index'le ayarlanmış bir polling relay çoğu ekibe yetiyor. Debezium'a, gecikme ya da veritabanı yükü ölçülerek sıkıştığı yerde geçiyorum.

### Yeni bir veri deposu eklemeden önce neye bakıyorsun?

PostgreSQL'in kendi araçlarının sorunu çözüp çözmediğine. Ayrı bir depo, işletilecek bir sistem daha demek; önce eldeki aracın sınırını ölçüyorum.
