Provided by:
manpages-tr_1.0.5.1-1.1_all 
İSİM
CREATE RULE - bir yeniden yazma kuralı tanımlar
KULLANIM
CREATE [ OR REPLACE ] RULE isim AS ON olay
TO tablo [ WHERE koÅŸul ]
DO [ ALSO | INSTEAD ] { NOTHING | komut | ( komut ; komut ... ) }
AÇIKLAMA
CREATE RULE belirtilen bir tabloya uygulanması için yeni bir kural
tanımlar. CREATE OR REPLACE RULE ya yeni bir kural oluşturur ya da o
tabloda mevcut aynı isimde bir kural varsa o kuralı değiştirir.
PostgreSQL kural sistemi veritabanı tablolarında veri girme, güncelleme
veya silme işlemlerini gerçekleştirecek ek bir eylem tanımlamayı mümkün
kılar. Başka bir deyişle, bir kural, belirtilen bir tablo üzerinde her
komut çalıştırılışında ek komutların çalıştırılmasına sebep olur.
Bundan başka, bir INSTEAD kuralı ile bir komutun bir başka komut ile
değiştirilebilmesi, hatta hiç çalıştırılmaması da mümkündür. Kurallar,
sanal tabloların oluşturulmasında da kullanılabilir. Bir kuralın
aslında bir komut dönüştürme mekanizası mı yoksa bir komut makrosu mu
olduğunu bilmek önemlidir. Dönüşüm, verilen komutlar çalıştırılmadan
önce meydana gelir. Eğer, bir işlemin herbir fiziksel satır için tek
tek uygulanmasını istiyorsanız, bunu şüphesiz bir kuralla değil, bir
tetikle yaparsınız. Kural sistemi hakkında daha ayrıntılı bilgi edinmek
için
http://www.postgresql.org/docs/8.0/static/rules.html adresine bakınız.
Şimdilik, ON SELECT kuralları koşulsuz INSTEAD kuralları olmalı ve tek
bir ON SELECT komutundan oluşan eylemler içermelidirler. Bu şekilde,
bir ON SELECT kuralı aslında bir tabloyu bir sanal tabloya döndürür,
ancak tabloda ne varsa değil, kuralın SELECT komutunun döndürdüğü
satırlar kullanılır. Sanal tabloları, önce bir gerçek tablo ardından da
buna bir ON SELECT kuralı uygulayıp oluşturmak yerine bir CREATE VIEW
komutu yazarak oluşturmak daha iyi bir çözümdür.
Bir sanal tablo üzerinde ON INSERT, ON UPDATE ve ON DELETE kuralları
tanımlayıp, diğer tabloların ilgili güncellemelerini bu güncelleme
eylemleri ile değiştirerek güncellenebilir bir sanal tablo görüntüsü
oluÅŸturabilirsiniz.
Sanal tablo güncellemeleri için koşullu kurallar kullanmak isterseniz
bir hileye baÅŸvurabilirsiniz: belirteceÄŸiniz her eylemin bir koÅŸulsuz
INSTEAD kuralı içermesini sağlamalısınız. Eğer kural, koşullu ise ya da
INSTEAD kuralı değilse, sistem güncelleme eylemini uygulamayı hala
reddetmeye çalışacaktır. Çünkü, bazı durumlarda, sanal tablonun taklidi
üzerinde uygulanacak eylemin sonuna geldiğini varsayacaktır. Eğer,
koşullu kurallardaki tüm kullanışlı durumların uygulanmasını
istiyorsanız, sistemin asla bir tablo taklidini güncelleme çağrısı
yapılmadığını anlamasını sağlamak için koşulsuz bir DO INSTEAD NOTHING
kuralı ekleyin. Ardından da INSTEAD içermeyen koşullu kuralları
oluşturun; uygulandıkları yerlerde, bunlar öntanımlı INSTEAD NOTHING
eylemine eklenir.
PARAMETRELER
isim Oluşturulacak kuralın ismi. Bu aynı tablodaki diğer kuralların
isimlerinden farklı olmalıdır. Aynı tabloda ve aynı olay türünde
çok sayıda kural varsa, bunlar alfabetik sırada uygulanır.
olay SELECT, INSERT, UPDATE ve DELETE cümlelerinden biridir.
tablo Kuralın uygulanacağı tablo ya da sanal tablonun ismi (şema
nitelemeli olabilir).
koşul Herhangi bir koşullu SQL ifadesi (boolean döndüren). NEW ve OLD
olması ve ortak değer işlevleri içermemesi dışında bu koşullu
ifade hiçbir tabloya başvuru yapamaz.
INSTEAD
Komutların "özgün komutların yerine" çalıştırılacağını belirtir.
ALSO Komutların "özgün komutlara ek olarak" çalıştırılacağını
belirtir.
ALSO ve INSTEAD birlikte belirtilemez. ALSO öntanımlıdır.
komut Kuralın eylemleri olan komut ya da komutlar. Geçerli komutlar
SELECT, INSERT, UPDATE, DELETE veya NOTIFY'dır.
koşul ve komut içinde, özel tablo isimleri NEW ve OLD başvurulacak
tablonun değerlerini nitelemek için kullanılabilir. NEW, ON INSERT ve
ON UPDATE kurallarında veri girilecek ya da güncellenecek yeni bir
satırı belirtirken kullanılabilir. OLD ise, ON UPDATE ve ON DELETE
kurallarında güncellenecek ya da silinecek mevcut bir satırı
belirtirken kullanılabilir.
EK BİLGİ
Üzerinde bir kural tanımlayabilmeniz için tablo üzerinde RULE yetkiniz
olmalıdır.
Döngüsel kurallardan kaçınmaya çalışmanız çok önemlidir. Örneğin,
aşağıdaki iki kural tanımı PostgreSQL tarafından kabul edildiği halde
sorgunun defalarca baştan uygulanması nedeniyle PostgreSQL bir hata
raporlayacaktır:
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;
Şimdilik, bir kural eylemi bir NOTIFY komutu içeriyorsa, ne olursa
olsun, kuralın uygulanacağı bir satır olmasa bile, NOTIFY komutu
çalıştırılır. Örnek:
CREATE RULE notify_me AS ON UPDATE TO mytable DO ALSO NOTIFY mytable;
UPDATE mytable SET name = 'foo' WHERE id = 42;
UPDATE sırasında, id = 42 koşulu ile eşleşen bir satır olmasa bile, bir
NOTIFY olayı gönderilecektir. Bu, gerçekleme ile ilgili bir
kısıtlamadır; ileriki sürümlerde düzeltilebilir.
UYUMLULUK
CREATE RULE, sorgunun tamamını yeniden yazma sistemi olarak bir
PostgreSQL oluÅŸumudur.
ÇEVİREN
Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Nisan 2005