Postgresql Tetikleyicileri nelerdir?
Bir PostgreSQL tetikleyicisi, bir veritabanı nesnesinde bir veritabanı olayı meydana geldiğinde otomatik olarak tetiklenen bir işlevdir. Örneğin bir masa.
Bir tetikleyiciyi etkinleştirebilen veritabanı olaylarının örnekleri arasında INSERT, UPDATE, DELETE vb. Yer alır. Ayrıca, bir tablo için bir tetikleyici oluşturduğunuzda, bu tablo silindiğinde tetikleyici otomatik olarak bırakılır.
Bu PostgreSQL Eğitiminde aşağıdakileri öğreneceksiniz:
- Postgresql Tetikleyicileri nelerdir?
- POSRGREQL'de Tetikleme Nasıl Kullanılır?
- Tetikleyici Oluşturma
- PgAdmin'i kullanma
- Tetikleyicileri Düşürmek
POSRGREQL'de Tetikleme Nasıl Kullanılır?
Bir tetikleyici, oluşturma sırasında FOR EACH ROW operatörü ile işaretlenebilir. Böyle bir tetikleyici, işlem tarafından değiştirilen her satır için bir kez çağrılacaktır. Bir tetikleyici, oluşturulması sırasında FOR EACH STATEMENT operatörü ile de işaretlenebilir. Bu tetikleyici, belirli bir işlem için yalnızca bir kez yürütülecektir.
Tetikleyici Oluşturma
Bir tetikleyici oluşturmak için CREATE TRIGGER işlevini kullanıyoruz. Fonksiyonun sözdizimi şöyledir:
CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-nameON table-name[-- Trigger logic];
Tetikleyici adı, tetikleyicinin adıdır.
ÖNCE, SONRA ve YERİNE, tetikleyicinin ne zaman çağrılacağını belirleyen anahtar kelimelerdir.
Olay adı, tetikleyicinin çağrılmasına neden olacak olayın adıdır. Bu INSERT, UPDATE, DELETE vb. Olabilir.
Tablo adı, tetikleyicinin oluşturulacağı tablonun adıdır.
Bir INSERT işlemi için tetik oluşturulacaksa, ON sütun-adı parametresini eklemeliyiz.
Aşağıdaki sözdizimi bunu göstermektedir:
CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];
Örneğin:
Aşağıda verilen Fiyat tablosunu kullanacağız:
Fiyat:
Price tablosunda yapılan değişiklikleri günlüğe kaydedeceğimiz başka bir Price_Audits tablosu oluşturalım:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL);
Artık Auditfunc adlı yeni bir işlev tanımlayabiliriz:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql;
Yukarıdaki işlev, Price_Audits tablosuna yeni satır kimliği ve kaydın oluşturulduğu zaman dahil olmak üzere bir kayıt ekleyecektir.
Artık tetikleme işlevine sahip olduğumuza göre, onu Fiyat tablomuza bağlamalıyız. Tetikleyiciye price_trigger adını vereceğiz. Yeni bir kayıt oluşturulmadan önce, değişiklikleri günlüğe kaydetmek için tetikleme işlevi otomatik olarak çağrılacaktır. İşte tetikleyici:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Fiyat tablosuna yeni bir kayıt ekleyelim:
INSERT INTO PriceVALUES (3, 400);
Şimdi Fiyat tablosuna bir kayıt eklediğimize göre, Price_Audit tablosuna da bir kayıt eklenmelidir. Bu, Fiyat tablosunda oluşturduğumuz tetikleyicinin bir sonucu olacaktır. Şunu kontrol edelim:
SELECT * FROM Price_Audits;
Bu, aşağıdakileri döndürecektir:
Tetik başarıyla çalıştı.
Listeleme tetikleyicileri
PostgreSQL'de oluşturduğunuz tüm tetikleyiciler, pg_trigger tablosunda saklanır. Veritabanındaki tetikleyicilerin listesini görmek için, aşağıda gösterildiği gibi SELECT komutunu çalıştırarak tabloyu sorgulayın:
SELECT tgname FROM pg_trigger;
Bu, aşağıdakileri döndürür:
Pg_trigger tablosunun tgname sütunu, tetikleyicinin adını gösterir.
Tetikleyicileri düşürmek
Bir PostgreSQL tetikleyicisini bırakmak için, aşağıdaki sözdizimiyle DROP TRIGGER deyimini kullanıyoruz:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
Tetikleyici adı parametresi, silinecek tetikleyicinin adını belirtir.
Tablo adı, tetikleyicinin silineceği tablonun adını belirtir.
IF EXISTS yan tümcesi, var olan bir tetikleyiciyi silmeye çalışır. IF EXISTS yan tümcesini kullanmadan var olmayan bir tetikleyiciyi silmeye çalışırsanız, bir hata alırsınız.
CASCADE seçeneği, tetikleyiciye bağlı tüm nesneleri otomatik olarak bırakmanıza yardımcı olacaktır.
RESTRICT seçeneğini kullanırsanız, nesneler buna bağlıysa tetikleyici silinmeyecektir.
Örneğin:
Tablo Fiyatındaki example_trigger adlı tetikleyiciyi silmek için aşağıdaki komutu çalıştırıyoruz:
Company tablosuna example_trigger adlı tetikleyiciyi bırakmak için aşağıdaki komutu çalıştırın:
DROP TRIGGER example_trigger IF EXISTSON Company;
PgAdmin'i kullanma
Şimdi pgAdmin kullanılarak üç eylemin de nasıl gerçekleştirildiğini görelim.
Tetikleyiciler Oluşturma
Aynısını pgAdmin aracılığıyla gerçekleştirmek için şunu yapın:
Adım 1) pgAdmin hesabınıza giriş yapın.
Adım 2)
- Soldaki gezinme çubuğundan Veritabanları'nı tıklayın.
- Demo 'yu tıklayın.
Adım 3) Price_Audits tablosunu oluşturmak için sorgu düzenleyicisini yazın:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Adım 4) Yürüt düğmesini tıklayın.
Adım 5) Denetim işlevini tanımlamak için aşağıdaki kodu çalıştırın:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql
Adım 6) Fiyat tetikleyicisini oluşturmak için aşağıdaki kodu çalıştırın:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Adım 7)
- Fiyat tablosuna yeni bir kayıt eklemek için aşağıdaki komutu çalıştırın:
INSERT INTO PriceVALUES (3, 400)
- Price_Audits tablosuna bir kaydın eklenip eklenmediğini kontrol etmek için aşağıdaki komutu çalıştırın:
SELECT * FROM Price_Audits
Bu, aşağıdakileri döndürmelidir:
Adım 8) Price_Audits tablosunun içeriğini kontrol edelim:
Listeleme tetikleyicileri
Adım 1) Veritabanınızdaki tetikleyicileri kontrol etmek için aşağıdaki komutu çalıştırın:
SELECT tgname FROM pg_trigger
Bu, aşağıdakileri döndürür:
Tetikleyicileri Düşürmek
Company tablosuna example_trigger adlı tetikleyiciyi bırakmak için aşağıdaki komutu çalıştırın:
DROP TRIGGER example_trigger IF EXISTSON Company
Özet:
- Bir PostgreSQL tetikleyicisi, tablo gibi bir veritabanı nesnesinde bir veritabanı olayı meydana geldiğinde otomatik olarak tetiklenen bir işlevi ifade eder.
- Bu tür veritabanı olaylarının örnekleri arasında INSERT, UPDATE, DELETE vb. Yer alır.
- Bir tetikleyici, yalnızca kendisi için oluşturulduğu veritabanı nesnesinin ömrü boyunca mevcuttur.
- Veritabanı nesnesi silinirse, tetikleyici de silinecektir.
- PostgreSQL tetikleyicileri, CREATE TRIGGER deyimi kullanılarak oluşturulur.
- Her tetikleyici, tetiklendiğinde tetikleyicinin ne yapacağını belirten bir işlevle ilişkilidir.
Bu Eğitimde kullanılan Veritabanını indirin