PostgreSQL DELETE TRIGGER Nedir Nasıl Kullanılır?

PostgreSQL DELETE TRIGGER Nedir Nasıl Kullanılır?, Trigger Nedir ? Nasıl Kullanılır? Yazımda Trigger  ile ilgili detaylı bilgileri ve genel kullanımından bahsetmiştim. Bu yazımda Delete  Triggerdan bahsedeceğim.

İlk olarak trigger oluşturmadan önce function yada procedure oluşturmamız gerekmektedir. Bunu yapmamızda ki amaç create trigger komutu içerisinde yapılacak işlemi o fonksiyonu kullanarak gerçekleştiriyor olacağımızdandır.

 

Delete trigger  ile ilgili örnek yaparak daha iyi oturacağını düşünüyorum.

 

Veliler tablosun delete işlemi yapıldığında bunu hangi veliler tablosunda ki id ,adi, soyadi kolonlarını ve bu delete işlemini hangi kullanıcın yaptığını ve ne zaman yaptığını  ve hangi işlemin yapıldığını veliler audit tablosuna yazan trigger yapacağız.

İlk olarak delete yapılanların logunu tutacak olan Veliler_audit isminde tablomuzu oluşturuyoruz.

CREATE TABLE "Veliler_Audit"
(
"Velilerid" INT NOT NULL,
"İsim" VARCHAR(20) NOT NULL,
"Soyisim" VARCHAR(20) NOT NULL,
"UserName" VARCHAR(20) NOT NULL,
"Tarih" VARCHAR(20) NOT NULL,
"İşlem"  VARCHAR(20) NOT NULL
);

Tablomuzu oluşturduktan sonra verilerimizi veliler_audit tablosuna eklenmesi için aşağıdaki gibi fonksiyon oluşturmamız gerekiyor. Burada returns kısmında

Returns trigger komutunu kullandığımız görebilirsiniz. Bunun sebebi bu fonksiyonun trigger da kullanılacağından dolayıdır.

 

CREATE OR REPLACE FUNCTION veliler_delete_trigger_fnc()
  RETURNS trigger AS
$$
BEGIN
    INSERT INTO "Veliler_Audit" ( "Velilerid", "İsim", "Soyisim","UserName" ,"Tarih","İşlem")
         VALUES(NEW."no",NEW."adi",NEW."soyadi",current_user,now(),'delete');
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';

Fonksiyonumuzu oluşturduktan sonra aşağıdaki gibi oluşturduğumuz fonksiyonu en altta belirttiğimiz triger’ı oluştuyoruz.

 

CREATE TRIGGER velilerdeletetrigger
 BEFORE delete
 ON "veliler"
 FOR EACH ROW
EXECUTE PROCEDURE veliler_delete_trigger_fnc();


Veliler tablosundaki 14 numaralı kaydı  silelim.

 

delete from veliler where "no" = 14

Kaydımız silinmiş mi kontrol edelim.

Loading