Sayılar ve Kuramlar: plpython
Kayitli prosedurler (stored procedures) veri tabanlarina fonksiyonel bazli cetrefil ek mantik eklemek gerektiginde gundeme gelirler. Cogunlukla bir sorgudan gelen sonucu satir satir isleyerek ek mantik uygulamak gerektigine kullanilirlar, SELECT vb. sorgu komutlari, her ne kadar kuvvetli ozelliklere sahip olsalar da, bu baglamda yetersiz kalabilirler.
Kayitli prosedurleri kodlamak icin her tabanin kendine has bir dili var cogunlukla, Oracle PL/SQL kullanir, MySql baska, vs. Hepsi de kosul (if), dongu (loop) icin farkli komutlar kullanirlar. Postgresql da kayitli prosedur icinde Python kullanmak mumkun. Bu buyuk rahatlik cunku farkli bir dil ogrenmeye gerek kalmiyor. Kurmak icin
sudo -u postgres createlang plpythonu [taban] -U postgres
Ornek bir prosedur
Sonucun 4 geldigini goreceksiniz.
Python bazli PG kayitli islemleri her turlu Python paketini import edebilirler. Yani select uzerinde cagirdiginiz bir islem arka planda Numpy, Scipy kullaniyor bile olabilir! Burada muthis potansiyel var. Raporlama motorunuz (mesela Pentaho) hicbir seyden habersiz "basit" SQL isletiyor olabilir, ama arka planda o basit cagrilar sofistike analitik islemleri yapiyor olabilirler.
Plpython fonksiyonlari icinden logging mumkun, basta
LOG_FILENAME = '/tmp/plpython.log'
ile istenilen cikti ustte tanimli dosyaya yaziliyor.
Plpython icinden kullanilan python, ya da sisteminizde kurulu ayni Python'un kullanilis sekli biraz daha secici olabilir. Mesela if 'kelime' in degisken gibi bir ifade eger degisken None ise disaridan bir test ile problemsiz calissa da Postgresql icinden problem cikartti. Bu tur farkliliklar olabilir.