Postgres hakkında bilseydim iyi olurdu diyeceğim şeyler
- Postgres belgelerinin kapsamı: Postgres’in resmi belgeleri çok iyidir, ancak hacmi o kadar büyüktür ki başlangıç seviyesindeki bir mühendisin baştan sona okuması zordur.
Veri normalizasyonu
- Veri normalizasyonu: Veritabanı şemasında yinelenen verileri kaldırma sürecidir. Örneğin,
documents tablosunda user_email sütunu bulundurmak yerine bunu users tablosuna yabancı anahtarla bağlamak daha iyidir.
- Denormalizasyon ihtiyacı: Belirli verileri daha hızlı okumak için bazen denormalizasyon gerekebilir. Ancak denormalize edilmiş veriler, veri tutarsızlığı veya artan yazma karmaşıklığı gibi maliyetler doğurur.
Postgres yaratıcılarının tavsiyelerine uyun
- Postgres Wiki’deki "yapılmaması gerekenler": Resmi Postgres Wiki’de bir "yapılmaması gerekenler" listesi vardır. Tam olarak anlamasanız bile hatalardan kaçınmanıza yardımcı olabilir.
- Öneriler: Tüm metinleri saklamak için
text tipini kullanın, tüm zaman damgalarını saklamak için timestampz/time with time zone tipini kullanın, tablo adlarını snake_case ile yazın.
Yaygın SQL tuhaflıkları
- SQL büyük/küçük harfe duyarlı değildir: SQL anahtar sözcükleri büyük/küçük harfe duyarlı değildir. Bu sadece Postgres’e özgü değildir.
NULL değerinin tuhaflığı: SQL’deki NULL, "bilinmiyor" anlamına gelir ve çoğu operatörle birleştiğinde sonuç NULL olur. IS NULL, IS NOT NULL gibi operatörlerle NULL karşılaştırılabilir.
psql'i daha kullanışlı hale getirmek
- Çıktı okunabilirliğini artırma: Uzun çıktıları daha rahat görebilmek için terminal pager ayarlanabilir. Pager olarak
less kullanılabilir.
- Belirsiz
NULL değerlerini netleştirme: psql içinde NULL değerini gösterecek bir dize ayarlayarak çıktıda NULL daha açık hale getirilebilir.
- Otomatik tamamlama kullanımı:
psql, SQL anahtar sözcüklerini veya tablo adlarını kolayca girmek için otomatik tamamlamayı destekler.
İndeks eklemenin etkisi
- İndeksin tanımı: İndeks, verilerin hızlı sorgulanmasına yardımcı olan bir veri yapısıdır.
- İndeksin sınırları: Yerel veritabanında neredeyse hiç satır yoksa indeks yararlı olmayabilir. Birden fazla sütun indekslenirken sıra önemlidir.
JSONB kullanımı
- JSONB’nin avantajları ve dezavantajları: Postgres, JSON’u verimli biçimde depolama ve sorgulama özellikleri sunar; ancak yanlış kullanılırsa performans düşebilir.
- JSONB’nin yapısal sınırlamaları: JSONB sütunları yapı garantisi vermez; bu nedenle standart tablo şemaları kadar kendi kendini belgeleyen bir yapıya sahip değildir.
Diğer faydalı ipuçları
- Uzun transaction’ların sorunları: Bir transaction çok uzun sürerse diğer istemcilerin veritabanına erişmesini engelleyebilir.
- Postgres’in güçlü özellikleri: Postgres, doküman odaklı veritabanlarının güçlü yanlarını sunar ve JSONB üzerinden verileri verimli biçimde depolayıp sorgulayabilir.
2 yorum
Yapılmaması gerekenler; bir gün mutlaka okuyacağım.
Hacker News görüşü
Postgres büyük/küçük harfe duyarlıdır, ancak sorgularda anahtar kelimeleri büyük harfle yazmak okunabilirliği artırmak içindir. Bu zorunlu değildir ama hata ayıklama sırasında sorguyu görsel olarak daha anlaşılır hale getirmek faydalıdır
actuallyUsingCaseInIdentifiersgibi tanımlayıcılarda büyük harf kullanmaktan kaçınmak isterim"Don't Do This" wiki maddesini ilk kez keşfettim ve çok faydalı buldum
İçeriğin büyük kısmı Postgres'e özgü değil (ör.
null'ın tuhaflığı, indeks sütun sırası vb.)null'ın indeksler ve benzersiz kısıtlarla etkileşim biçimi MySQL'de de sezgisel değilnullkabul etmeyen bir e-posta sütunu venullkabul eden bir kullanıcı adı sütunu varken,(email, username)gibi bir benzersiz kısıt varsa aynı e-postayınullkullanıcı adıyla birden fazla kez ekleyebilirsinizVeriyi normalize etme tavsiyesine temkinli yaklaşmak gerekir
Keşke geliştiriciler normalizasyona daha fazla dikkat etse ve her şeyi JSON(b) sütunlarına koymayı bıraksa
"yolculuk" kelimesi aşırı kullanıldığı için bloglarda itici geliyor
Kod bölümleri mobilde neredeyse kaydırılamayacak kadar kullanışsız
JSON spesifikasyonunda
null, sabit bir değerdir; SQL'deki NULL ile aynı şey değildirİndeks eklemek hiçbir etki yaratmayabilir
Bu tür yazıları okuyup %90'ını anlayabiliyor olmak, üstlendiğim işlerle ilgili gurur duymamı sağlıyor