Provided by: manpages-tr_1.0.5.1-1.1_all bug

İSİM

       CREATE RULE - bir yeniden yazma kuralı tanımlar

KULLANIM

       CREATE [ OR REPLACE ] RULE isim AS ON olay
           TO tablo [ WHERE koul ]
           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).

       koul  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.

       koul 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