PostgreSQL

Çatışmada PostgreSQL Upsert

Çatışmada PostgreSQL Upsert
'Upsert' ifadesi, RDBMS'de bir birleştirme olarak tanınır. Tekrarlanan girişler nedeniyle benzersiz kısıtlama ihlali hatalarıyla uğraşmak istemiyorsanız, PostgreSQL'de bir 'Upsert' olması yararlıdır. Genel bir UPDATE komutu çalıştırdığınızda, gerekli ayarlamalar yalnızca bir kayıt komut standartlarına uyuyorsa gerçekleşir; böyle bir veri yoksa, hiçbir şey olmaz. Bir tabloya yeni bir satır eklediğinizde, PostgreSQL, daha önce mevcutsa satırı günceller veya yoksa yeni satırı dahil eder. 'Upsert' SQL anahtar sözcüğü, "güncelleme" ve "insert" sözcüklerini birleştirir.” Bu makale, PostgreSQL 'Upsert' özelliğinin nasıl çalıştığını ve eklenen satır zaten tabloda mevcutsa bilgi eklemek veya güncellemek için 'Upsert' özelliğinin nasıl kullanılacağını gösterir.

Sözdizimi

'Upsert' ON CONFLICT sorgusunun sözdizimi aşağıdadır.

>> INSERT INTO tablo_adı(sütun_listesi) DEĞER (değer_listesi) ÇATIŞMA hedef eyleminde;

PostgreSQL Komut Satırı Kabuğu'nu Başlatın

Başlamak için Uygulama menüsünden PostgreSQL komut satırı kabuğunu başlatın. Gerekli sunucuya bağlayın. Üzerinde çalışmak istediğiniz veritabanı adını girin. Başka bir bağlantı noktasında çalışmak için, çalışmak istediğiniz bağlantı noktası numarasını ve kullanıcı adını yazın. Varsayılan parametrelerle devam etmek için boşlukları olduğu gibi bırakın ve her seçenekte 'Enter' tuşuna basın. Seçilen kullanıcı adı için bir parola ekleyin ve komut kabuğunuz kullanıma hazır olmalıdır.

Örnek 1:

Şimdi, çatışmada 'Upsert' ile başlayabiliriz. Farklı kişilerin kayıtlarını gösteren bazı alanların bulunduğu seçili bir veritabanında 'kişi' başlıklı bir tablonuz olduğunu varsayalım. Bu kayıtlar insanların adlarını, yaşlarını, şehirlerini ve ülkelerini gösterir. Tablo aşağıda görüntülenir.

>> SEÇİM * KİŞİDEN;

Bir hatanın veya çatışmanın nasıl ortaya çıkabileceğini bilmek önemlidir. Aynı zamanda birincil anahtar olan 'id' tablosu alanı 1'den 15'e kadar değerler içerir. Kullanıcı tabloya bazı yinelenen kayıtları eklemeye çalıştığında, çakışma meydana gelir.

Kayıtları 'person' tablosuna ekleyerek aşağıdaki INSERT ifadesini deneyelim. 'id' alanının '3' değeri tabloda zaten mevcut olduğundan bu sorgu bir hataya neden olur.

>> KİŞİYE EKLE (kimlik, isim, yaş, şehir, ülke) DEĞERLER ( '3', 'Habib', '45', 'Chakwal', 'Pakistan');

Örnek 2: ON CONFLICT Cümlesiyle İtiraz

Yinelenen kayıtların eklenmesi nedeniyle bu hataya neden olan INSERT sorgusunu önlemek için ON CONFLICT yan tümcesini kullanacağız. ON CONFLICT komutu, farklı kullanımlara sahip iki ifadeyle gelir.

Örnek 3: DO HİÇBİR ŞEKİLDE ÜCRETSİZ

Bu örnekte, HİÇBİR ŞEY YAPMAYIN yan tümcesine bakacağız. Bu madde, hata veya çakışma durumunda hiçbir işlemin gerçekleştirilmeyeceğini detaylandırır. Başka bir deyişle, bu madde yalnızca çakışma veya hatadan kaçınacaktır.

Öyleyse, 'kişi' tablosuna yinelenen kayıtları eklemek için daha önce kullandığımız INSERT komutunu birkaç değişiklik ekleyerek deneyelim. Bu maddede DO HİÇBİR ŞEY YAPMA deyimiyle birlikte ON CONFLICT deyimini ekledik. ON CONFLICT yan tümcesi benzersiz 'id' sütununa uygulandı. Bu, kullanıcı 'id' sütununa yinelenen değeri eklemeye çalıştığında, çakışmayı önleyeceği ve hiçbir şey yapmayacağı anlamına gelir. Aşağıdaki resimde de göreceğiniz gibi yeni kaydı tabloya bile eklemeyecek, önceki kaydı da güncellemeyecek.

>> KİŞİYE EKLE (kimlik, isim, yaş, şehir, ülke) DEĞERLERİ ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') ÇATIŞMA ÜZERİNE (id) HİÇBİR ŞEY YAPMAYIN;

Özgünlük adına 'kişi' tablosunu tekrar kontrol edelim. Aşağıdaki resimde gördüğünüz gibi tabloda herhangi bir değişiklik yapılmamıştır.

>> SEÇİM * KİŞİDEN;

Örnek 2: DO Cümlesi ile Upsert

Ardından, ON CONFLICT ve DO deyimlerine bakacağız. Adından da anlaşılacağı gibi, ___ yan tümcesi, bir tabloya yinelenen bir değer eklendiğinde, hata veya çakışma durumunda bir eylem gerçekleştirir. Küçük bir değişiklikle 'kişi' tablosuna yinelenen bir kayıt eklemek için daha önce kullandığımız aynı ekleme komutunu kullanacağız. ON CONFLICT deyimini içine DO deyimi ile ekledik. Kullanıcı, benzersiz olmayan değeri 'id' sütununa eklemeye çalıştığında, çakışmayı önlemek için bir eylem gerçekleştirir. 'Kişi' tablosundaki verilerde bir güncelleme olduğunu gösteren DO yan tümcesinden sonra UPDATE yan tümcesini kullanıyoruz. SET anahtar sözcüğü, 'ad' sütununun değerini yeni değer olan 'Habib'e ayarlamak için kullanılır ve şu anda 'id'nin '3' olduğu durumlarda EXCLUDED anahtar sözcüğünü kullanır. Aşağıdaki sorguyu çalıştırırsanız sorgunun yapıldığını göreceksiniz.

>> KİŞİYE EKLE (kimlik, isim, yaş, şehir, ülke) DEĞERLER ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') ÇATIŞMA ÜZERİNE (id) SET adını GÜNCELLEME YAPIN.isim;

Yukarıdaki sorgudaki değişiklikleri görmek için 'kişi' tablosunun kayıtları getirilmelidir. Aşağıdaki sorguyu komut satırı kabuğunda çalıştırırsanız, sonraki çıktıyı görmelisiniz.

>> SEÇİM * KİŞİDEN;

Aşağıdaki çıktıdan da görebileceğiniz gibi, kişinin adı 'Habib' olarak güncellendi, burada 'id' '3'.'

Aşağıda gösterildiği gibi, INSERT sorgusunun ON CONFLICT yan tümcesindeki EXCLUDED anahtar sözcüğünü kullanarak birden fazla sütundaki kayıtları da güncelleyebilirsiniz.

>> KİŞİYE EKLE (kimlik, ad, yaş, şehir, ülke) DEĞERLER ( '3', 'Habib', '45', 'Chakwal', 'Pakistan') ÇATIŞMADA (id) SET adını GÜNCELLEME YAPIN = HARİÇ.isim, şehir = HARİÇ.Kent;

Değişiklikler aşağıda gösterilmiştir.

>> SEÇİM * KİŞİDEN;

Sonuç

Bu makale, DO ve HİÇBİR ŞEY YAPMA eylemleriyle birlikte ON CONFLICT yan tümcesi ile PostgreSQL 'Upsert'i nasıl kullanacağınızı gösterdi. Bu makaleyi okuduktan sonra, PostgreSQL 'Upsert'i nasıl kullanacağınızı daha kolay anlayacağınızı umuyoruz.'

Ubuntu'da Oynanacak En İyi 10 Oyun
Windows platformu, günümüzde doğal olarak Windows'u desteklemek için geliştirilen oyunların büyük bir yüzdesi nedeniyle oyun oynamak için hakim platfo...
Linux için En İyi 5 Arcade Oyunu
Günümüzde bilgisayarlar oyun oynamak için kullanılan ciddi makinelerdir. Yeni yüksek puanı alamazsan, ne demek istediğimi anlayacaksın. Bu yazıda, bug...
Wesnoth 1 Savaşı.13.6 Geliştirme Yayınlandı
Wesnoth 1 Savaşı.13.Geçen ay yayınlanan 6. sürüm, 1. sürümdeki altıncı geliştirme sürümüdür.13.x serisi ve özellikle kullanıcı arayüzü için bir dizi i...