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

İ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