Provided by:
manpages-tr_1.0.5.1-2_all 
ISIM
CREATE RULE - bir yeniden yazma kurali tanimlar
KULLANIM
CREATE [ OR REPLACE ] RULE isim AS ON olay
TO tablo [ WHERE ko,sul ]
DO [ ALSO | INSTEAD ] { NOTHING | komut | ( komut ; komut ... ) }
A,CIKLAMA
CREATE RULE belirtilen bir tabloya uygulanmasi icin yeni bir kural
tanimlar. CREATE OR REPLACE RULE ya yeni bir kural olusturur ya da o
tabloda mevcut ayni isimde bir kural varsa o kurali degistirir.
PostgreSQL kural sistemi veritabani tablolarinda veri girme, guncelleme
veya silme islemlerini gerceklestirecek ek bir eylem tanimlamayi mumkun
kilar. Baska bir deyisle, bir kural, belirtilen bir tablo uzerinde her
komut calistirilisinda ek komutlarin calistirilmasina sebep olur.
Bundan baska, bir INSTEAD kurali ile bir komutun bir baska komut ile
degistirilebilmesi, hatta hic calistirilmamasi da mumkundur. Kurallar,
sanal tablolarin olusturulmasinda da kullanilabilir. Bir kuralin
aslinda bir komut donusturme mekanizasi mi yoksa bir komut makrosu mu
oldugunu bilmek onemlidir. Donusum, verilen komutlar calistirilmadan
once meydana gelir. Eger, bir islemin herbir fiziksel satir icin tek
tek uygulanmasini istiyorsaniz, bunu suphesiz bir kuralla degil, bir
tetikle yaparsiniz. Kural sistemi hakkinda daha ayrintili bilgi edinmek
icin
http://www.postgresql.org/docs/8.0/static/rules.html adresine bakiniz.
Simdilik, ON SELECT kurallari kosulsuz INSTEAD kurallari olmali ve tek
bir ON SELECT komutundan olusan eylemler icermelidirler. Bu sekilde,
bir ON SELECT kurali aslinda bir tabloyu bir sanal tabloya dondurur,
ancak tabloda ne varsa degil, kuralin SELECT komutunun dondurdugu
satirlar kullanilir. Sanal tablolari, once bir gercek tablo ardindan da
buna bir ON SELECT kurali uygulayip olusturmak yerine bir CREATE VIEW
komutu yazarak olusturmak daha iyi bir cozumdur.
Bir sanal tablo uzerinde ON INSERT, ON UPDATE ve ON DELETE kurallari
tanimlayip, diger tablolarin ilgili guncellemelerini bu guncelleme
eylemleri ile degistirerek guncellenebilir bir sanal tablo goruntusu
olusturabilirsiniz.
Sanal tablo guncellemeleri icin kosullu kurallar kullanmak isterseniz
bir hileye basvurabilirsiniz: belirteceginiz her eylemin bir kosulsuz
INSTEAD kurali icermesini saglamalisiniz. Eger kural, kosullu ise ya da
INSTEAD kurali degilse, sistem guncelleme eylemini uygulamayi hala
reddetmeye calisacaktir. Cunku, bazi durumlarda, sanal tablonun taklidi
uzerinde uygulanacak eylemin sonuna geldigini varsayacaktir. Eger,
kosullu kurallardaki tum kullanisli durumlarin uygulanmasini
istiyorsaniz, sistemin asla bir tablo taklidini guncelleme cagrisi
yapilmadigini anlamasini saglamak icin kosulsuz bir DO INSTEAD NOTHING
kurali ekleyin. Ardindan da INSTEAD icermeyen kosullu kurallari
olusturun; uygulandiklari yerlerde, bunlar ontanimli INSTEAD NOTHING
eylemine eklenir.
PARAMETRELER
isim Olusturulacak kuralin ismi. Bu ayni tablodaki diger kurallarin
isimlerinden farkli olmalidir. Ayni tabloda ve ayni olay turunde
cok sayida kural varsa, bunlar alfabetik sirada uygulanir.
olay SELECT, INSERT, UPDATE ve DELETE cumlelerinden biridir.
tablo Kuralin uygulanacagi tablo ya da sanal tablonun ismi (sema
nitelemeli olabilir).
ko,sul Herhangi bir kosullu SQL ifadesi (boolean donduren). NEW ve OLD
olmasi ve ortak deger islevleri icermemesi disinda bu kosullu
ifade hicbir tabloya basvuru yapamaz.
INSTEAD
Komutlarin "ozgun komutlarin yerine" calistirilacagini belirtir.
ALSO Komutlarin "ozgun komutlara ek olarak" calistirilacagini
belirtir.
ALSO ve INSTEAD birlikte belirtilemez. ALSO ontanimlidir.
komut Kuralin eylemleri olan komut ya da komutlar. Gecerli komutlar
SELECT, INSERT, UPDATE, DELETE veya NOTIFY'dir.
ko,sul ve komut icinde, ozel tablo isimleri NEW ve OLD basvurulacak
tablonun degerlerini nitelemek icin kullanilabilir. NEW, ON INSERT ve
ON UPDATE kurallarinda veri girilecek ya da guncellenecek yeni bir
satiri belirtirken kullanilabilir. OLD ise, ON UPDATE ve ON DELETE
kurallarinda guncellenecek ya da silinecek mevcut bir satiri
belirtirken kullanilabilir.
EK BILGI
Uzerinde bir kural tanimlayabilmeniz icin tablo uzerinde RULE yetkiniz
olmalidir.
Dongusel kurallardan kacinmaya calismaniz cok onemlidir. Ornegin,
asagidaki iki kural tanimi PostgreSQL tarafindan kabul edildigi halde
sorgunun defalarca bastan uygulanmasi nedeniyle PostgreSQL bir hata
raporlayacaktir:
CREATE RULE "_RETURN" AS
ON SELECT TO t1
DO INSTEAD
SELECT * FROM t2;
CREATE RULE "_RETURN" AS
ON SELECT TO t2
DO INSTEAD
SELECT * FROM t1;
SELECT * FROM t1;
Simdilik, bir kural eylemi bir NOTIFY komutu iceriyorsa, ne olursa
olsun, kuralin uygulanacagi bir satir olmasa bile, NOTIFY komutu
calistirilir. Ornek:
CREATE RULE notify_me AS ON UPDATE TO mytable DO ALSO NOTIFY mytable;
UPDATE mytable SET name = 'foo' WHERE id = 42;
UPDATE sirasinda, id = 42 kosulu ile eslesen bir satir olmasa bile, bir
NOTIFY olayi gonderilecektir. Bu, gercekleme ile ilgili bir
kisitlamadir; ileriki surumlerde duzeltilebilir.
UYUMLULUK
CREATE RULE, sorgunun tamamini yeniden yazma sistemi olarak bir
PostgreSQL olusumudur.
,CEVIREN
Nilgun Belma Buguner <nilgun (at) belgeler.gen.tr>, Nisan 2005