# PostgreSQL’de Yeni Sütun Oluşturma: Baştan Uçtan Tam Bir Rehber
PostgreSQL veritabanınızda mevcut bir sütuna bağlı yeni bir sütun oluşturmanız mı gerekiyor? Bu, verileri dönüştürmek, hesaplamalar yapmak veya veri analizi için yeni özellikler eklemek için sıkça kullanılan bir işlemdir. Bu kapsamlı rehber, PostgreSQL’de yeni bir sütun oluşturma sürecini, yeni başlayanlardan ileri düzey kullanıcılara kadar herkes için adım adım açıklayacak ve gerçek dünya örnekleriyle pekiştirecektir. Veri bütünlüğünü korurken performansı optimize etmenin yollarını da keşfedeceğiz.
PostgreSQL’de Yeni Bir Sütun Nasıl Oluşturulur? (Adım Adım Kılavuz)
PostgreSQL’de yeni bir sütun oluşturmak için ALTER TABLE komutunu kullanırız. Bu komut, mevcut bir tabloya yeni sütunlar eklemek, mevcut sütunları değiştirmek veya silmek için kullanılır. İşte temel yapı:
ALTER TABLE tablo_adı
ADD COLUMN sütun_adı veri_tipi [kısıtlamalar];
* tablo_adı: Yeni sütunun ekleneceği tablonun adıdır.
* sütun_adı: Oluşturulacak yeni sütunun adıdır.
* veri_tipi: Yeni sütunun veri tipi (örneğin: INTEGER, VARCHAR(255), DATE, BOOLEAN vb.)
* kısıtlamalar: NOT NULL, UNIQUE, DEFAULT, CHECK gibi sütun üzerinde uygulanacak kısıtlamalar.
Örnek: urunler adlı bir tablomuz olduğunu ve bu tabloya ürün fiyatının %18 KDV’sini hesaplayacak yeni bir sütun eklemek istediğimizi varsayalım.
ALTER TABLE urunler
ADD COLUMN kdv_fiyat NUMERIC(10,2);
Bu komut, urunler tablosuna kdv_fiyat adında, 10 basamaklı (2 basamak ondalık) bir sayısal sütun ekler. Ancak şu an için bu sütun boştur. Fiyat hesaplaması için bir güncelleme yapmalıyız.
Mevcut Bir Sütuna Dayalı Yeni Sütun Oluşturma: Uygulamada
Yeni sütunu mevcut bir sütuna göre oluşturmak için UPDATE komutunu kullanırız. Örneğimizde, fiyat sütununu kullanarak kdv_fiyat sütununu hesaplayalım:
UPDATE urunler
SET kdv_fiyat = fiyat * 1.18;
Bu komut, urunler tablosundaki her satır için kdv_fiyat sütununu, fiyat sütununun %18 artırılmış değeriyle günceller.
Gerçek Dünya Örneği: E-Ticaret Veri Tabanı
Bir e-ticaret sitesinin ürün bilgilerini tutan bir veritabanı düşünelim. urunler tablosunda urun_adi, fiyat, stok_adedi sütunları mevcut. Müşteri yorumlarına göre bir puanlama sistemi eklemek istiyoruz. Öncelikle yorum_puani adında bir sütun ekleyelim:
ALTER TABLE urunler
ADD COLUMN yorum_puani NUMERIC(2,1) DEFAULT 0;
Daha sonra, müşteri yorumlarını işleyerek bu sütunu güncelleyeceğiz. Örneğin, 5 yıldızlı bir yorum için yorum_puani 5.0, 1 yıldızlı bir yorum için 1.0 olarak güncellenebilir. Bu işlem, bir fonksiyon veya tetikleyici (trigger) kullanılarak otomatikleştirilebilir. (Fonksiyon ve tetikleyici konuları ileri düzeyde ele alınacaktır.)
Performans Optimizasyonu: Büyük Tablolarda Yeni Sütun Ekleme
Büyük tablolarda yeni sütun eklemek performans sorunlarına yol açabilir. İşte bazı optimizasyon ipuçları:
* Toplu Güncellemeler: Mümkün olduğunca UPDATE komutunu tek seferde tüm satırlar için çalıştırın.
* İndeksler: Yeni sütuna indeks eklemek, sorgulamaları hızlandırabilir, ancak indeksleme işlemi de zaman alabilir. İndeksleme ihtiyacını dikkatlice değerlendirin.
* VACUUM ve ANALYZE: Yeni sütun eklendikten sonra VACUUM ve ANALYZE komutlarını çalıştırmak, veritabanı performansını iyileştirebilir.
* Parçalı Güncellemeler: Çok büyük tablolarda, verileri parçalara bölerek (örneğin, tarih aralıklarına göre) güncelleme işlemini daha küçük parçalara ayırın.
Bu optimizasyonlar, fatihsoysal.com gibi bir web sitesinin veritabanı yönetiminde özellikle önemlidir. Büyük veri setleriyle çalışırken performansın korunması kritiktir.
İleri Düzey Teknikler: Fonksiyonlar ve Tetikleyiciler
Yeni sütun değerlerini hesaplamak için fonksiyonlar ve tetikleyiciler kullanabiliriz. Örneğin, urunler tablosuna yeni bir ürün eklendiğinde otomatik olarak kdv_fiyat sütununu hesaplayan bir tetikleyici oluşturabiliriz.
CREATE OR REPLACE FUNCTION hesapla_kdv()
RETURNS TRIGGER AS $$
BEGIN
NEW.kdv_fiyat := NEW.fiyat * 1.18;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER kdv_hesaplama
BEFORE INSERT ON urunler
FOR EACH ROW
EXECUTE PROCEDURE hesapla_kdv();
Bu kod, urunler tablosuna yeni bir ürün eklendiğinde hesapla_kdv fonksiyonunu çalıştırarak kdv_fiyat sütununu otomatik olarak hesaplar.
Edge Case’ler ve Hata Yönetimi
* Veri Tipi Uyumluluğu: Yeni sütunun veri tipi, mevcut sütunlarla uyumlu olmalıdır. Uyumluluk sorunları, hatalara yol açabilir.
* NULL Değerler: Yeni sütun NOT NULL olarak tanımlanırsa, tüm satırlarda değer olması gerekir. DEFAULT kısıtlaması kullanarak varsayılan bir değer atayabilirsiniz.
* Kısıtlamalar: UNIQUE, CHECK gibi kısıtlamalar, veri bütünlüğünü sağlamak için önemlidir. Yanlış kısıtlamalar, veri girişinde hatalara yol açabilir.
Öğrenme Yol Haritası
Yeni Başlayan:
* Adım adım açıklama: Yukarıda verilen temel ALTER TABLE ve UPDATE komutlarını kullanarak basit bir örnek üzerinde pratik yapın.
* Basit kod örneği: ogrenciler adlı bir tabloya yas sütununu ekleyip, dogum_tarihi sütunundan hesaplayın.
Orta Seviye:
* Gerçek hayat örneği: E-ticaret veritabanı örneğini genişletin, stok seviyesi azaldığında uyarı verecek bir sütun ekleyin ve bunu bir tetikleyici ile otomatikleştirin.
* Optimizasyon ipuçları: Büyük bir veri kümesi oluşturup, yeni sütun ekleme işlemini farklı optimizasyon teknikleri ile test edin. Performans farklarını gözlemleyin.
İleri Düzey:
* Performans analizi: EXPLAIN ANALYZE komutu kullanarak sorgu performansını analiz edin. Farklı indeksleme stratejilerinin performans üzerindeki etkisini inceleyin.
* Edge case’ler: NULL değerler, farklı veri tipleri ve kısıtlamaların etkilerini inceleyin. Hata yönetimi stratejileri geliştirin.
Sonuç
PostgreSQL’de mevcut bir sütuna bağlı yeni bir sütun oluşturmak, veritabanı yönetiminde sıkça kullanılan bir işlemdir. Bu rehberde, temel kavramlardan ileri düzey tekniklere kadar geniş bir yelpazede bilgi vermeye çalıştık. Veri bütünlüğünü ve performansı göz önünde bulundurarak doğru teknikleri seçmek, veritabanınızın verimliliğini artırmada önemlidir.
Sıkça Sorulan Sorular:
1. Yeni sütun eklemek mevcut verileri etkiler mi? UPDATE komutu kullanılıyorsa evet, etkiler.
2. Yeni sütuna varsayılan değer atayabilir miyim? Evet, DEFAULT kısıtlaması kullanılarak yapılabilir.
3. Yeni sütun için indeks oluşturmak her zaman gerekli midir? Hayır, indeks oluşturmak sorgulama performansını artırsa da indeks oluşturma işlemi zaman alır ve depolama alanını kullanır.
4. Büyük tablolarda performans nasıl optimize edilebilir? Toplu güncellemeler, indeksler, VACUUM ve ANALYZE komutları kullanılarak optimize edilebilir.
5. Bir sütunu silmek mümkün müdür? Evet, ALTER TABLE ... DROP COLUMN komutu kullanılarak yapılabilir.
Yazar: Fatih Soysal
