Takip et

PostgreSQL: How to Create a Duplicate Column in a Table (Çeviri)

# PostgreSQL’de Sütun Kopyalama: Adım Adım Uygulama Rehberi

PostgreSQL veritabanınızda bir sütunu kopyalamak mı istiyorsunuz? Mevcut bir sütunun aynısını oluşturmak, veri bütünlüğünü sağlamak, analizler yapmak veya gelecekteki değişikliklere karşı önlem almak için gerekli olabilir. Bu rehber, PostgreSQL’de sütun kopyalamayı yeni başlayanlardan uzmanlara kadar herkesin anlayabileceği şekilde adım adım açıklayacak, gerçek dünya örnekleri ve performans optimizasyon teknikleri sunacaktır. Veri manipülasyonunda uzmanlaşmak ve PostgreSQL becerilerinizi geliştirmek için [fatihsoysal.com](https://fatihsoysal.com) adresini ziyaret edebilirsiniz.

PostgreSQL’de Sütun Nasıl Kopyalanır? (Yeni Başlayanlar İçin)

PostgreSQL’de mevcut bir sütunun kopyasını oluşturmanın en basit yolu ALTER TABLE komutunu kullanmaktır. Bu yöntem, yeni sütunu mevcut sütunun verileriyle aynı anda doldurur. İşte adım adım bir örnek:

Adım 1: products adında bir tablo olduğunu varsayalım ve bu tablodaki price sütununu kopyalamak istiyoruz.

Adım 2: Aşağıdaki komutu çalıştırın:

ALTER TABLE products
ADD COLUMN price_copy NUMERIC;

UPDATE products
SET price_copy = price;

İlk komut, price_copy adında yeni bir sayısal sütun ekler. İkinci komut ise, price sütunundaki tüm verileri price_copy sütununa kopyalar.

Örnek Senaryo: Bir e-ticaret sitesinin ürün bilgilerini tutan products tablosunda, ürün fiyatlarının geçmişini takip etmek için price_copy sütunu oluşturmak isteyebilirsiniz. Bu sayede fiyat değişikliklerini izleyebilir ve analizler yapabilirsiniz.

Mevcut Sütunu Kopyalayıp Veri Tipini Değiştirme (Orta Seviye)

Bazen mevcut sütunun kopyasını oluştururken veri tipini değiştirmeniz gerekebilir. Örneğin, price sütunu NUMERIC tipindeyken, price_copy sütununu DECIMAL(10,2) gibi daha spesifik bir tipte oluşturmak isteyebilirsiniz. Bu durumda aşağıdaki komutu kullanabilirsiniz:

ALTER TABLE products
ADD COLUMN price_copy DECIMAL(10,2);

UPDATE products
SET price_copy = price::DECIMAL(10,2);

Burada ::DECIMAL(10,2) kısımları, price sütunundaki verilerin DECIMAL(10,2) tipine dönüştürülmesini sağlar. Veri tipi dönüşümü sırasında olası hataları (örneğin, ondalık basamak sayısının aşılması) yakalamak için UPDATE komutundan önce BEGIN; ve sonrasında COMMIT; veya ROLLBACK; komutlarını kullanarak bir işlem başlatıp sonlandırmanız önerilir.

Farklı Bir Tablodaki Sütunu Kopyalama (Orta Seviye)

Farklı bir tablodaki bir sütunu kopyalamak için INSERT INTO ... SELECT komutunu kullanabilirsiniz. Örneğin, customers tablosundaki customer_id sütununu orders tablosuna kopyalamak için:

INSERT INTO orders (customer_id)
SELECT customer_id FROM customers;

Bu komut, customers tablosundaki tüm customer_id değerlerini orders tablosuna ekler. Ancak bu işlem, orders tablosunun customer_id sütununa sahip olmasını gerektirir. Eğer orders tablosunda customer_id sütunu yoksa, öncelikle ALTER TABLE komutu ile eklemeniz gerekir. Bu işlem, büyük tablolarda performans sorunlarına yol açabilir. Bu durumu optimize etmek için COPY komutunu kullanmak daha verimli olabilir.

Performans Optimizasyonu ve Büyük Veri Setleri (İleri Düzey)

Büyük veri setlerinde sütun kopyalama işlemi zaman alabilir. Performansı artırmak için aşağıdaki teknikleri kullanabilirsiniz:

* COPY Komutu: COPY komutu, verileri dosya sisteminden veya dosya sistemine hızlı bir şekilde aktarmak için tasarlanmıştır. Büyük miktarda veri kopyalamak için COPY komutu UPDATE komutundan daha verimlidir. Örneğin, price sütununu price_copy sütununa kopyalamak için:

COPY products (price_copy) FROM (SELECT price FROM products) TO STDOUT WITH CSV HEADER;
COPY products (price_copy) FROM STDIN WITH CSV HEADER;

Bu komut, price sütunundaki verileri geçici bir dosyaya yazar ve daha sonra bu dosyayı price_copy sütununa kopyalar.

* Parçalı İşlem (Chunking): Büyük tabloyu daha küçük parçalara bölüp her parçayı ayrı ayrı işlemek performansı artırabilir. Bu, özellikle UPDATE komutu kullanıldığında etkilidir.

* İndeksleme: Kopyalama işlemi tamamlandıktan sonra, yeni sütuna indeks eklemek sorguların hızlanmasına yardımcı olur.

Gerçek Dünya Örnekleri ve Vaka Analizleri

Örnek 1: Bir finans kuruluşunun müşteri hesap bilgilerini tutan bir tablosunda, account_balance sütununa ek olarak, günlük bakiye geçmişini takip etmek için daily_balance adında yeni bir sütun eklemek gerekebilir. Bu, düzenleyici kuralların gereği veya detaylı analizler yapmak için olabilir. Büyük veri setleri için COPY komutu ve parçalı işlem yöntemleri kullanılmalıdır.

Örnek 2: Bir e-ticaret sitesinin ürün yorumlarını tutan bir tablosunda, yorumların dilini belirten yeni bir sütun eklemek gerekebilir. Bu, çok dilli bir platform için önemlidir ve yeni sütun, yorumların dilini belirten bir fonksiyon kullanarak doldurulabilir.

Örnek 3: Bir sosyal medya platformunun kullanıcı aktivitelerini tutan bir tablosunda, kullanıcıların takipçi sayısının bir kopyasını tutmak, takipçi sayısındaki değişiklikleri izlemek ve analizler yapmak için faydalı olabilir.

Edge Case’ler ve Hata Yönetimi

* Veri Tipi Uyuşmazlığı: Kopyalanan sütunlar arasında veri tipi uyuşmazlığı varsa, dönüştürme işlemleri sırasında hatalar oluşabilir. Bu hataları yakalamak ve uygun dönüştürme işlemleri yapmak önemlidir.

* NULL Değerler: NULL değerlerin nasıl ele alınacağı belirlenmelidir. NULL değerleri koruyabilir veya varsayılan bir değer atayabilirsiniz.

* Kısıtlamalar: Kopyalanan sütun üzerinde kısıtlamalar varsa (örneğin, NOT NULL, UNIQUE), bu kısıtlamalara uyulmalıdır.

Sıkça Sorulan Sorular (SSS)

1. Kopyalama işlemi sırasında veritabanı kilitlenir mi? Büyük işlemler sırasında kısmi kilitlenmeler olabilir, ancak doğru indeksleme ve optimizasyon teknikleriyle bu etkileri en aza indirebilirsiniz.

2. Kopyalama işlemi geri alınabilir mi? ROLLBACK komutu ile işlemi geri alabilirsiniz, ancak işlem tamamlandıktan sonra geri alma daha zor olabilir.

3. Kopyalama işlemi için hangi indeks türleri en uygunudur? Bİ-TREE indeksleri, sayısal ve tarih verileri için etkilidir.

4. Parçalı işlem (chunking) nasıl uygulanır? PostgreSQL’in LIMIT ve OFFSET maddelerini kullanarak tabloyu parçalara bölebilir ve her parçayı ayrı ayrı işleyebilirsiniz.

5. COPY komutu hangi durumlarda daha verimlidir? Büyük miktarda veri kopyalamak için COPY komutu UPDATE komutundan daha verimlidir.

Sonuç:

PostgreSQL’de sütun kopyalama işlemi, çeşitli yöntemlerle gerçekleştirilebilir. Yeni başlayanlar için basit ALTER TABLE ve UPDATE komutları yeterli olabilirken, büyük veri setleri ve karmaşık senaryolar için COPY komutu, parçalı işlem ve performans optimizasyon teknikleri kullanılmalıdır. Bu rehber, PostgreSQL’de sütun kopyalamayı adım adım öğrenmenize ve gerçek dünya senaryolarında başarılı bir şekilde uygulamanıza yardımcı olmayı amaçlamaktadır. Veri tabanınızın performansını optimize etmek ve daha fazla bilgi için [fatihsoysal.com](https://fatihsoysal.com) adresini ziyaret edebilirsiniz.

Yazar: Fatih Soysal

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.