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

PostgreSQL                                                                                        CREATE RULE(7)