PostgreSQL - Fonksiyonlar

Çoğu veritabanında olduğu gibi, bir dizi cümleyi zincirleyebiliriz. SQL ve bunları işlevsel bir bloğun birimi olarak ele alın; farklı veritabanları bu işlemi farklı isimler, saklı prosedürler, modüller, makrolar vb. ile tanımlar.

İçinde PostgreSQL bunlara fonksiyon denir. Birkaç SQL ifadesini birleştirmenin yanı sıra, bu işlevler bize prosedürel dilleri (PL) kullanarak SQL ifadelerini yürütme yeteneği de verir.

İçinde PostgreSQL Bunun için birden fazla seçeneğimiz ve bunları genişletme yeteneğimiz var.

1. PostgreSQL işlevleri


Bir fonksiyonun anatomisi
Fonksiyonları yazmak için kullanılan dil ne olursa olsun, bir yapıya sahiptirler, bu yapı aşağıdakilerle sentezlenebilir:
 CREATE OR REPLACE FUNCTION işlev_adı (arg1_arg1veri türü) RETURNS bazı_tür / setoff tür / TABLO / (…) / AS $$ BODY kapalı işlev $$ LANGUAGE dil_fonksiyonu
Gördüklerimizi tarif edersek, oldukça basit, OLUŞTUR VEYA DEĞİŞTİR FONKSİYONU işlev oluşturma yan tümcesidir, func_name arg1'in alacağı addır ve alacağı parametredir ve arg1_datatype, söz konusu parametre, yani bir tamsayı, bir dize vb. olan veri türüdür. İçinde İADELER Fonksiyonumuzun sonucunu döndürüyoruz, $$, fonksiyonun gövdesine yol verecek bloğun başlangıcı ve ardından $$ ile aynı bitiyor ve son olarak DİLİM fonksiyonun yazıldığı dili belirlememizi sağlar.

İyi tanımlanmış ve oldukça okunabilir bir yapıdır, bu nedenle fonksiyonlarımızı oluştururken sorun yaşamamalıyız.

SQL ile fonksiyon yazma
kullanarak fonksiyonları yazın SQL Oldukça kolay ve hızlı, temel olarak SQL ifadelerimizi alıp fonksiyonların üstbilgisini ve altbilgisini buna eklemek ve işimiz bitti.

Ancak diğer her şey gibi, bu da bazı fedakarlıkların pahasına gelir, örneğin, daha fazla koşullu yürütme denetimi dalı oluşturmak için başka bir dille çalışabilseydik, bu düzeltilebilir olsa da birden fazla SQL ifadesine sahip olamayacağımız esnekliğini kaybederiz. çeşitli yöntemler kullanarak.

En büyük avantajı, SQL zamanlayıcı olduğu için PostgreSQL dizinlerden yararlanmamıza ve böylece yürütülmesini hızlandırmamıza izin verir, diğer yandan diğer dillerde işlev her zaman bir kara kutu olacaktır.

Şimdi SQL ile yazılmış bir fonksiyona bakalım:

 CREATE OR REPLACE FUNCTION ins_logs (param_user_name varchar, param_description text) RETURNS tamsayı günlüklere $$ INSERT INTO (kullanıcı_adı, açıklama) DEĞERLER ($ 1, $ 2) DÖNÜŞ log_id; $$ DİL 'sql' UÇUCU;
Yukarıda ve sonunda bölümde tanımlanan yapıyı takip ettiğimizi görüyoruz. DİLİM 'sql' yan tümcesini tanımlıyoruz UÇUCU Sahip olduğu, aynı parametreleri alsa bile, kendisine yapılan her çağrıda işlevin farklı bir şey döndürebileceği anlamına gelir. Ardından fonksiyonumuzu çağırmak için şunları kullanabiliriz:
 SELECT ins_logs ('lhsu', 'bu bir testtir') new_id olarak;
bir cümle kurarız SEÇME, fonksiyon aktiftir ve dönen ne alacağımızdır ve bu durumda yeni_id dediğimiz ve fonksiyonun log_id olarak döndürdüğü bir değer göreceğiz.
Hatta bir kayıt güncellemesi yapmak ve bu örnekteki gibi bir void parametresi döndürmek için bir fonksiyon kullanabiliriz:
 CREATE OR REPLACE FUNCTION upd_logs (log_id tamsayı, param_user_name varchar, param_description text) $$ GÜNCELLEME günlükleri SET user_name = 2 $, açıklama = 3 $, log_ts = CURRENT_TIMESTAMPWHERE log_id = $ 1;' $sql'sql' Void OLARAK DÖNÜŞ 'uçucu'
Boş olduğundan, bir alıcı alanına ihtiyacımız yok, bu yüzden onu aşağıdaki gibi yürütürüz:
 SELECT upd_logs (12, 'elbise', 'Regina olarak değiştir');
Burada, önceki çağrıdan As new_id'nin son adımını kaldırdığımızı görebiliriz.
Bununla bu öğreticiyi bitiriyoruz, artık temel işlevlerimizi SQLkurduğumuz bir program veya sistem içerisinde ihtiyaç duyabileceğimiz birçok aktiviteyi kolaylaştırıyor ve basitleştiriyor.

2. Diğer dillerde PostgreSQL işlevleri


en çekici özelliklerinden biri PostgreSQL, yalnızca SQL dili ile sınırlı olmamasıdır.Modüllerin yüklenmesi sayesinde, işlevler oluşturmak için farklı dilleri kullanma olasılığı da dahil olmak üzere gelişmiş işlevleri birleştirmeyi seçebiliriz, bununla daha iyi koşul oluşturma yeteneklerini ve çeşitli dillere özgü avantajları kullanarak büyük esneklik elde edebiliriz.

PL / pgSQL ile fonksiyon yazma
Bir fonksiyonda yapmak istediğimiz sorgular için SQL standardının yetersiz kaldığını fark ettiğimiz anda her zaman PL/pgSQL kullanımına başvurabiliriz; SQL ile ilgili farklarından ve iyileştirmelerinden biri, yerel değişkenlerin DECLARE deyimi kullanılarak bildirilebilmesidir, ayrıca akış üzerinde kontrolümüz olabilir ve işlevin gövdesini bir BEGIN END bloğuna almamız gerekir.

Bu dilde yazılmış bir fonksiyon örneği görelim:

 CREATE FUNCTION sel_logs_rt (param_user_name varchar) DÖNÜŞ TABLOSU (log_id int, user_name varchar (50), açıklama metni, log_ts timestamptz) AS $$ DÖNÜŞ SORGUSU SEÇ log_id, user_name, description, log_ts WHERE user_name günlüklerinden; param SON; $$ DİL 'plpgsql' KARARLI; 
Şimdi Python ile fonksiyonların nasıl yazılacağını görelim.

Python ile fonksiyon yazma
Python, çok sayıda kütüphaneye sahip oldukça temiz bir programlama dilidir.
PostgreSQL, Python'u işlevler oluşturmak için kullanmanıza izin veren tek veritabanı motorudur.

Python ile fonksiyon oluşturma imkanını elde etmek için öncelikle sunucumuzda dilin kurulu olduğundan emin olmalıyız. Yüklediğimizi bildiğimizde, aşağıdaki komutları kullanarak PostgreSQL içindeki uzantıları etkinleştirmeliyiz:

 GENİŞLETME OLUŞTUR plpython2u; GENİŞLETME OLUŞTUR plpython3u; 
Hataları önlemek için uzantıları etkinleştirmeden önce Python'un çalışır durumda olduğundan emin olmalıyız.

Python ile temel işlevler
Python'u kullanabilmek için her şeyi etkinleştirdikten sonra, işlevimizi oluşturmaya başlayacağız, PostgreSQL'in veri türlerini Python veri türlerine dönüştürebileceğini ve bunun tersini bilmek önemlidir. PL / Python, dizileri ve bileşik türleri bile döndürebilir.

Aşağıda PL/pgSQL ile yapılamayacak bir online kaynakta metin araması yapan bir fonksiyon görelim, aşağıdaki resimde kodu göreceğiz ve ardından ilgili açıklamayı yapacağız.

  • Kullanacağımız kütüphaneleri import ediyoruz.
  • Kullanıcının giriş parametrelerini birleştirerek web araması yapıyoruz.
  • Yanıtı okuyoruz ve onu raw_html adlı bir HTML dosyasına kaydediyoruz.
  • HTML'nin ile başlayan ve başlamadan önce biten kısmını kaydederiz.
  • HTML etiketlerini ve boşlukları kaldırıyoruz ve sonuç olarak adlandırılan değişkeni tekrar kaydediyoruz.
  • Nihai sonucu döndürüyoruz.
  • Python kullanmanın bir başka ilginç özelliği de doğrudan işletim sistemi ile etkileşime geçebilmemizdir, bir dizin listeleme yapan bir fonksiyon görelim, bunun bir süper kullanıcı tarafından oluşturulması gerektiğine dikkat edilmelidir:
 CREATE OR REPLACE FONKSİYONU list_incoming_files () SETOF metnini $$ içe aktarma işletimi dönüşü os.listdir ('/ gelen') OLARAK DÖNDÜRÜR $$ DİL 'plpython2u' GEÇİCİ GÜVENLİK TANIMLAYICI;
Bunun kullanımı nedir? Kendimize sorabiliriz, çünkü bir sistemde mevcut olan dosyalara başvurmak istediğimizi hayal edin, fonksiyon çağrısı şöyle bir şey olurdu:
 list_incoming_files FROM dosya adını SEÇ () dosya adı olarak NEREDE dosya adı ILIKE '% .csv'
Bununla, bu öğreticiyi bitiriyoruz, diğer dillerde işlevlerin oluşturulmasını zaten ele alıyoruz. PostgreSQL, bu da bize ihtiyaçlarımızı karşılama konusunda sonsuz bir alan sağlıyor.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave