PostgreSQL Array Veri Türü Ne İşe Yarar?

Selamlar. Bu yazıda PostgreSQL Array Veri Türü hakkında bilgiler vereceğim. Belirttiğim gibi veri türleri hakkında yazılar yazmaya devam ediyorum. Son yazı timestamp ve interval hakkındaydı.

PostgreSQL Array Veri Türü

PostgreSQL Array Veri Türü Ne İşe Yarar?

PostgreSQL Array Veri Türü, verileri diziler halinde tutmaya yarayan sütunları oluşturmak için kullanılırlar. Bu çok genelleyici tabir yetersiz olduğu için örneklerle göreceğiz. Biraz bahsetmek gerekiyorsa array sütunlar PostgreSQL tarafında önemli bir yere sahipler. Hepsini deneyemediğim için bir şey diyemiyorum ancak denediğim bütün türlerin kendisine ait array destekleri de var.

Hatta user-defined veri türleri için bu veri türünün yaptığı eyleme karşılık türleri postgresql kendisi oluşturuyor. Array veri türünün programlama dillerinde gördüğünüz yapıdan hiçbir farkı bulunmamakta. Bundan dolayı da ekstra öğrenme gibi bir durum söz konusu değil. Bu türün diğeri veri tabanı yönetim sistemlerinde olup olmadığına dair bir bilgim yok ve araştırmadım. O yüzden şimdilik sadece PostgreSQL için var diyorum.

Nasıl Kullanılır?

Öncelikle hayal ederek başlayalım. Diyelim ki bir tablomuz var adı da müşteriler. Müşterilerimizin birden fazla telefonunun olduğunu ya da olabileceğini biliyoruz. Bazı senaryolarda şöyle bir kaydetme gerçekleştirilebilir:

12345,123435,12516,221661

Bu yöntem işe yarar olabilir sorgunun kesinlik kazanması adına birden fazla değişken devreye sokulur. Bir diğer senaryo ise musteriler tablosu ve musteritelefonlar tablosunun join ile birbirine bağlanmış olması. Şu anda en çok kullanılan yöntemlerden birisi de bu zaten. Array türünde ise kolon kendisi array verisi sakladığı için join ya da seperator mantığıyla bir saklama olmayacak. Hadi tablo oluşturalım:

Sorgu başarıyla çalıştığında sevindiğimi belirtmeliyim. Çünkü PostgreSQL öğrenme aşamasında bu yazıyı yazıyorum ve bu yazıdan önce denediğim konuları yazıya aktarıyorum. Şimdi bu tabloya nasıl veri ekleriz? Öncelikle beklendiği şekliyle bir ekleme yapalım:

Beklenen yöntem köşeli parantezler arasında olması şeklindeydi. Bir problemimiz var her şey iyi hoş düşünülmüşken o array keywordü olmadan bu yapının ne olduğunun anlaşılamaması garip. Oldu ki unuttunuz bunu başka nasıl yaparsınız? Süslü parantezleri kullanabilirsiniz:

Açıkcası ilk yöntem bana daha zarif geldi. Eklerken şartlarımızı öğrendik ya array keywordü ve köşeli parantez ya da süslü parantezler gerekiyor bize. Bu tabloyu nasıl çekeriz? Örneğin burada where sorgusunu da devreye aldık diyelim:

İyi de hala biz array mantığını tam olarak göremedik. Bu sorgu sadece eklediğimiz ikinci yöntemi içeren kolonu gösteriyor. Örneğin array kolondaki 2. veriye nasıl erişirim? Burada belki de array bilgimizi değiştiren tek şey var. Dizi sıfırdan değil birinci indexten başlıyor. Örnek:

Bu arada istersek kolondaki 2. değerler arasında where sorgusu da yapabiliyoruz. Çok garip geliyor ama oluyor:

PostgreSQL Array Veri Türü ile Arama Yapma

Bu da önemli bir konu aslında. Bu konuda array içerisinde arama işlemi yapmanız gerekiyorsa any isimli fonksiyon kullanılır. Ayrıca bir üst örnekte index bilindiği için where sorgusuna direkt girişebildik. Fakat burada böyle bir şansımız yok ise arama yapmak en mantıklı işlem oluyor:

Arrayleri Açmak

Nasıl çevirilebileceğini bilemediğim için böyle isimlendirdim. Normalde tek satırda yer alan bilgi kümesini her bir array elemanı için satıra dönüştürecek şekilde düzenliyor. Eğer array kolonda 10 adet veri var ise her bir değeri satıra çevirecektir. Tabi birden fazla kolonla çalışıyorsanız bazı kolonlar duplicate gibi görünecektir. Arrayleri bulunduğu yapıdan çıkarıp satıra dökme işlemini unnest fonksiyonu ile sağlıyoruz:

Burada iki satırda da müşterinin adı görünecek. Aynı zamanda iki farklı telefonu da görünmüş olacak. Arrayler konusunda ayrıca tanımlama yaparken boyut belirtme, çok boyutlu array konularına da giriş yapabilirsiniz. Bu yazıda sadece basit olarak nasıl kullanılacağını anlattım.

Temel anlamda arrayleri anlatan bu yazının daha geniş anlatımına ulaşmak için resmi dokümanlara bakabilirsiniz. Herhangi bir sorunuz var ise yorum bırakabilir ya da iletişim sayfasından mail atabilirsiniz.

Okuduğunuz için teşekkürler.

admin

Hi. I’m Ali. I’m 23. I graduated Mehmet Akif Ersoy University from CS Related Department.

I can code with all programming languages. But today I’m writing .NET and JavaScript.

You may also like...