Postgres Nedir? Birçok Uygulamanın Arkasındaki Veritabanı
Postgres (resmi adıyla PostgreSQL), ücretsiz ve açık kaynaklı bir ilişkisel veritabanıdır: bir uygulamanın verilerini satır ve sütunlardan oluşan tablolarda saklayan, bu tabloları birbirine bağlayan ve sorulara SQL adı verilen bir dille yanıt veren bir programdır. Güvenilir olması, verinin doğruluğunu sıkı biçimde koruması ve bir kayıt listesinden büyük bir şirketin kayıtlarına kadar her şeyi kaldırabilecek kadar esnek olmasıyla bilinir. Birçok web uygulaması ve bunları barındıran hizmetlerin birçoğu onun üzerine kuruludur.
Yapay zekâyla yapı kurarken neden önemli?
Bir yapay zekâ uygulama oluşturucu projenize “bir veritabanı” eklediğinde, büyük ihtimalle bu Postgres’tir. Postgres kullanmak için SQL yazmanız gerekmez, ama biraz anlamak çok işe yarar:
- Veriyi veritabanının ihtiyaç duyduğu biçimde tarif edebilirsiniz. “Müşterilerin birçok siparişi olur; her siparişin birçok kalemi vardır” cümlesi doğrudan tablolara dönüşür.
- Doğru korumaları isteyebilirsiniz. Postgres, kuralları yapay zekâ kurduysa, kötü veriyi kendi başına reddedebilir — yinelenen bir e-posta ya da var olmayan bir müşteri için sipariş gibi.
- Yapılanları okuyabilirsiniz. Tablo adları, sütunlar ve ilişkiler bir tablo görüntüleyicide kolayca kontrol edilebilir; kodu hiç açmanız gerekmez.
Günlük bir benzetme: çok katı bir arşiv ofisi
Her türden şey için bir dolabın olduğu bir arşiv ofisi düşünün: biri müşteriler, biri siparişler, biri ürünler için. Dolaptaki her kartta aynı basılı kutular bulunur. Her kartın benzersiz bir numarası vardır ve bir sipariş kartı müşterinin ayrıntılarını tekrarlamaz; yalnızca “müşteri #214” der ve müşteri dolabına işaret eder.
Memur katıdır. Var olmayan bir müşteriye işaret eden bir siparişi dosyalamaz. Zorunlu olan tarih kutusu boşsa kartı kabul etmez. Bir hesap kartından başka bir hesap kartına para taşımanızı isterseniz, iki yarıyı da yapar ya da hiçbirini yapmaz — asla yalnızca birini değil.
Bu memur Postgres’tir. Dolaplar tablolar, basılı kutular sütunlar, her kart bir satır ve “müşteri #214” bağlantısı bir yabancı anahtar (foreign key)’tir.
Postgres neyi iyi yapar?
| Özellik | Sade anlamı |
|---|---|
| Tablolar ve ilişkiler | Veriler birbirine işaret eden tablolarda yaşar; bu yüzden hiçbir şey beş yerde kopyalanmaz |
| SQL | Soru sormak için standart bir dil: “geçen aydan ödenmemiş tüm siparişler, en yeniden eskiye” |
| İşlemler (ACID) | Bir grup değişiklik ya da hepsi gerçekleşir ya da hiçbiri; sunucu yarıda çökse bile |
| Kısıtlamalar (constraints) | Veritabanının kendi uyguladığı kurallar: zorunlu alanlar, benzersiz e-postalar, tablolar arasında geçerli bağlantılar |
| Dizinler (indexes) | Tablolar büyüdükçe aramaların hızlı kalmasını sağlayan arama kısayolları |
| JSONB | Sabit bir yapı uymadığında esnek, belge benzeri veriyi bir sütunda saklama |
| Tam metin araması | Basit durumlarda ayrı bir arama servisi olmadan metin alanlarında kelime arama |
| Eklentiler (extensions) | Harita ve konumlar için PostGIS ya da yapay zekâ gömülümlerini (embeddings) saklamak için pgvector gibi ek özellikler |
| Satır düzeyinde güvenlik | Hangi kullanıcının hangi satırları görebileceğini veritabanının içinde belirleyen kurallar |
Postgres, 1980’lerde California Üniversitesi, Berkeley’de bir araştırma projesi olarak başladı ve 1990’lardan beri küresel bir topluluk tarafından açık biçimde geliştiriliyor. Bu uzun geçmiş, onun çoğu zaman varsayılan seçim olmasının nedenidir: iyi belgelenmiştir, geniş destek görür ve her büyük bulut sağlayıcısı yönetilen bir sürüm sunar.
Çalışılmış bir örnek: bir elektronik tabloyu tablolara dönüştürmek
Diyelim ki küçük bir catering işi yapıyorsunuz ve her şeyi tek bir elektronik tabloda takip ediyorsunuz: her satır bir etkinlik; müşterinin adı, telefonu ve e-postası, tarih, menü kalemleri ve fiyat var.
Sorunlar hızla ortaya çıkar. Aynı müşteri altı satırda iki farklı telefon numarasıyla görünür. Menü kalemleri tek bir hücreye “canapés x40, salad x2” diye yazılmıştır; bu yüzden bu ay kaç canapé yaptığınızı toplayamazsınız.
Postgres’te aynı bilgi dört tabloya dönüşür:
| Tablo | Sütunlar | Notlar |
|---|---|---|
| clients | id, name, phone, email | E-posta benzersiz olmalı |
| events | id, client_id, date, venue, status | client_id gerçek bir müşteriyle eşleşmeli |
| menu_items | id, name, unit_price | Her yemek için bir satır |
| event_items | event_id, menu_item_id, quantity | Etkinlikleri yemeklerle, miktarla birbirine bağlar |
Artık bir müşterinin telefon numarası tek bir yerde durur. “Mart ayında kaç canapé yaptık?” tek bir SQL sorgusudur. Ve yeni bir etkinliği kalemleriyle kaydettiğinizde, bir işlem, yarısı kaydedilmiş bir etkinlikle asla karşılaşmamanızı sağlar.
İnsanların “elektronik tablomdan bir uygulama yap” dediklerinde atladıkları adım budur. Elektronik tabloyu uygulamaya dönüştürme rehberi bunu daha ileri götürür.
Temel terimler
- Tablo, satır, sütun: bir tür şey, o şeyin bir örneği, o şey hakkında bir bilgi parçası.
- Birincil anahtar (primary key): her satırın benzersiz kimliği; genellikle
id. - Yabancı anahtar (foreign key): başka bir tablodaki bir satıra işaret eden sütun; örneğin
client_id. - Şema (schema): tüm tablolarınızın ve sütunlarınızın tasarımı.
- Migration (göç): şema için kaydedilmiş, tekrarlanabilir bir değişiklik; örneğin “events tablosuna
venuesütunu ekle”. - Sorgu (query): SQL ile yazılmış bir soru ya da talimat.
- Bağlantı dizesi (connection string): arka ucunuzun veritabanına ulaşmak için kullandığı adres ve parola. Bu bir gizli bilgidir; bkz. ortam değişkenleri ve gizli bilgiler.
- Yönetilen Postgres: Postgres’i sizin yerinize çalıştıran, yedekleyen ve güncelleyen bir hizmet.
Uygulamaların bu tablolar üzerinde yaptığı her gündelik işlem — oluşturma, okuma, güncelleme, silme — için bkz. CRUD ne demek.
Yaygın hatalar ve yanlış anlamalar
- Tek dev tablo. Elektronik tabloyu sütun sütun kopyalamak aynı tekrar sorunlarına yol açar. Tekrar eden şeyleri kendi tablolarına ayırın.
- Listeleri tek bir metin alanında saklamak. Tek bir sütundaki “canapés x40, salad x2” sayılamaz ya da düzgünce aranamaz. Bir bağlantı tablosu kullanın.
- Kısıtlama yokluğu. “E-posta benzersiz olmalı” ya da “her etkinliğin bir müşterisi olmalı” gibi kurallar olmadan kötü veri sessizce girer ve aylar sonra ortaya çıkar.
- Canlıda veritabanını elle değiştirmek. Şema değişikliklerini migration olarak isteyin; böylece değişiklik kaydedilir ve tekrarlanabilir.
- Tarayıcının veritabanıyla doğrudan konuşmasına izin vermek. Ön yüz, yetkileri kontrol eden arka ucunuz üzerinden gitmelidir. Veritabanı parolası sayfa kodunda hiçbir zaman bulunmamalıdır.
- “Postgres yalnızca büyük şirketler içindir.” 50 satırlık bir bekleme listesi için de aynı rahatlıkla çalışır ve büyüdükçe ondan ayrılmanız gerekmez.
- Veritabanının yedek olduğunu sanmak. Veriyi saklar; ama sizi veriyi silmeye karşı otomatik olarak korumaz. Barındırma sağlayıcınızın hangi yedekleri sunduğunu kontrol edin.
Yapay zekâ oluşturucunuzdan ne isteyin
- “[Şeyleri] bir veritabanında sakla. Tablolar: … şu alanlarla: … Her [siparişi] bir [müşteriye] bağla.”
- “Müşterilerde e-postayı benzersiz yap. Şu alanları zorunlu kıl. Müşterisi olmayan bir siparişe izin verme.”
- “Her şema değişikliği için migration kullan.”
- “En sık yaptığımız aramalar için dizinler ekle: siparişleri müşteriye ve tarihe göre.”
- “Tüm veritabanı erişimi sunucudan geçsin. Bağlantı dizesini ortam değişkenlerinde tut.”
Veritabanı kavramına hiç aşina değilseniz, önce veritabanı nedir sayfasıyla başlayın, sonra buraya dönün. Tam yığın uygulama ise veritabanının ön yüz ve arka ucun yanında nerede durduğunu gösterir.
Mythex’te Postgres
Mythex, ihtiyacı olan her projeye kendi özel Postgres veritabanını verir. Bunu yapılandırmanız gerekmez: sohbette isteyin (“bekleme listesi e-postalarını bir veritabanına kaydet”) ya da /database komutunu kullanın; Mythex veritabanını ekler, bağlantı bilgilerini uygulamanıza enjekte eder ve isterseniz tabloları sizin için oluşturabilir. Yayımlanmış bir uygulamanın veritabanı, beş dakika boşta kaldığında uyur ve bir sonraki istekte uyanır; yalnızca gerçekten uyanık kaldığı süre için ücretlendirilirsiniz, bu da yapı kurmakla aynı kredi bakiyesinden düşer. Ayrıntılar veritabanı dokümanlarında var; veri kullanan uygulamaları görmek için pano şablonları iyi bir yerdir.
Sorular
Postgres ile PostgreSQL aynı mı?
Evet. PostgreSQL resmi adıdır, Postgres ise yaygın kısa adıdır; ikisi de aynı açık kaynaklı ilişkisel veritabanına işaret eder.
Postgres ücretsiz mi?
Evet. PostgreSQL, PostgreSQL Lisansı altında açık kaynaklıdır; ticari ürünlerde dahil ücretsiz kullanabilirsiniz. Yalnızca onu çalıştıran sunucuları ya da yönetilen hizmeti ödersiniz.
Postgres ile MySQL arasındaki fark nedir?
İkisi de ücretsiz, SQL tabanlı ilişkisel veritabanlarıdır ve çoğu uygulama için uygundur. Postgres, sıkı veri bütünlüğü, JSONB ve dizi gibi zengin veri türleri ve geniş bir eklenti ekosistemiyle bilinir; MySQL ise sadeliği ve web barındırmadaki uzun geçmişiyle öne çıkar.
Postgres küçük bir uygulama için iyi mi?
Evet. Tek tablolu bir bekleme listesi için de büyük üretim sistemleri için de iyi çalışır; uygulama büyüdükçe veritabanı değiştirmeniz gerekmez. Yönetilen hizmetler, bir veritabanı yöneticisi olmadan çalıştırmayı kolaylaştırır.