PostgreSQL Tetikleyiciler: Örnekle Oluşturun, Listeleyin ve Bırakın

Tetikleyici Nedir? PostgreSQL?

A PostgreSQL Tetik bir veritabanı nesnesinde bir veritabanı olayı meydana geldiğinde otomatik olarak tetiklenen bir işlevdir. Örneğin bir masa. Bir tetikleyiciyi etkinleştirebilecek veritabanı olaylarına örnek olarak INSERT, UPDATE, DELETE vb. verilebilir. Ayrıca, bir tablo için tetikleyici oluşturduğunuzda, o tablo silindiğinde tetikleyici otomatik olarak bırakılır.

Trigger nasıl kullanılır? PostgreSQL?

Bir tetikleyici, oluşturulması sırasında FOR EACH ROW operatörüyle 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 ECH STATEMENT operatörüyle de işaretlenebilir. Bu tetikleyici belirli bir işlem için yalnızca bir kez yürütülecektir.

PostgreSQL Tetikleyici oluşturma

Trigger oluşturmak için CREATE TRIGGER fonksiyonunu kullanıyoruz. İşte işlevin sözdizimi:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name  
ON table-name  
[  
 -- Trigger logic  
];

Tetikleyici adı tetikleyicinin adıdır.

BEFORE, AFTER ve INSTEAD OF tetikleyicinin ne zaman çağrılacağını belirleyen anahtar kelimelerdir.

Etkinlik adı, tetikleyicinin çağrılmasına neden olacak olayın adıdır. Bu olabilir INSERT, GÜNCELLEME, SİL vb.

Tablo adı, tetikleyicinin oluşturulacağı tablonun adıdır.

Eğer 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-name  
ON table-name  
[  
 -- Trigger logic
];

PostgreSQL Tetikleyici Örneği Oluştur

Aşağıda verilen Fiyat tablosunu kullanacağız:

Fiyat:

PostgreSQL Tetikleyici oluşturma

Fiyat tablosunda yapılan değişiklikleri kaydedeceğimiz başka bir tablo olan Price_Audits'i oluşturalım:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
);

Artık denetim işlevi adında yeni bir işlev tanımlayabiliriz:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql;

Yukarıdaki işlev, yeni satır kimliğini ve kaydın oluşturulduğu zamanı içeren Price_Audits tablosuna bir kayıt ekleyecektir.

Artık tetikleme işlevine sahip olduğumuza göre, bunu 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 Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

Fiyat tablosuna yeni bir kayıt ekleyelim:

INSERT INTO Price 
VALUES (3, 400);

Artık Price tablosuna kayıt eklediğimize göre Price_Audit tablosuna da kayıt eklemeliyiz. Bu, Fiyat tablosunda oluşturduğumuz tetikleyicinin bir sonucu olacaktır. Bunu kontrol edelim:

SELECT * FROM Price_Audits;

Aşağıdakini döndürecektir:

PostgreSQL Tetikleyici oluşturma

Tetik başarıyla çalıştı.

Postgres Listesi Tetikleyicisi

Oluşturduğunuz tüm tetikleyiciler PostgreSQL pg_trigger tablosunda saklanır. Sahip olduğunuz tetikleyicilerin listesini görmek için veritabanıSELECT komutunu aşağıda gösterildiği gibi çalıştırarak tabloyu sorgulayın:

SELECT tgname FROM pg_trigger;

Bu, aşağıdakileri döndürür:

Postgres Listesi Tetikleyicisi

pg_trigger tablosunun tgname sütunu tetikleyicinin adını belirtir.

Postgres Bırakma Tetikleyicisi

Bir düşürmek için PostgreSQL tetikleyiciyi kullanmak için DROP TRIGGER ifadesini aşağıdaki sözdizimiyle kullanırız:

DROP TRIGGER [IF EXISTS] trigger-name 
ON 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. Var olmayan bir tetikleyiciyi IF EXISTS deyimini kullanmadan silmeye çalışırsanız hata alırsınız.

CASCADE seçeneği, tetikleyiciye bağlı olan tüm nesneleri otomatik olarak bırakmanıza yardımcı olacaktır.

RESTRICT seçeneğini kullanırsanız nesneler ona bağlıysa tetikleyici silinmeyecektir.

Örneğin:

Price tablosundaki 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 EXISTS
ON Company;

pgAdmin'i kullanma

Şimdi pgAdmin kullanılarak üç eylemin de nasıl gerçekleştirildiğini görelim.

Tetikleyici Nasıl Oluşturulur PostgreSQL pgAdmin'i kullanma

Postgres'te pgAdmin'i kullanarak nasıl tetikleyici oluşturabileceğiniz aşağıda açıklanmıştır:

Adım 1) pgAdmin hesabınıza giriş yapın

PgAdmin'i açın ve kimlik bilgilerinizi kullanarak hesabınıza giriş yapın

Adım 2) Demo Veritabanı Oluşturun

  1. Soldaki gezinme çubuğundan Veritabanları'na tıklayın.
  2. Demo'yu tıklayın.

Tetikleyiciyi şurada oluştur: PostgreSQL pgAdmin'i kullanma

Adım 3) Sorguyu Yazın

Price_Audits tablosunu oluşturmak için sorguyu düzenleyiciye yazın:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

Adım 4) Sorguyu Yürütün

Yürüt düğmesine tıklayın

Tetikleyiciyi şurada oluştur: PostgreSQL pgAdmin'i kullanma

Adım 5) Auditfunc için Kodu Çalıştırın

Auditfunc fonksiyonunu tanımlamak için aşağıdaki kodu çalıştırın:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql

Adım 6) Tetikleyici oluşturmak için Kodu çalıştırın

Tetikleyici price_trigger'ı oluşturmak için aşağıdaki kodu çalıştırın:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

Adım 7) Yeni bir kayıt ekleyin

  1. Fiyat tablosuna yeni bir kayıt eklemek için aşağıdaki komutu çalıştırın:
    INSERT INTO Price
    VALUES (3, 400)
  2. Price_Audits tablosuna bir kayıt 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:

Tetikleyiciyi şurada oluştur: PostgreSQL pgAdmin'i kullanma

Adım 8) Tablo içeriğini kontrol edin

Price_Audits tablosunun içeriğini kontrol edelim:

pgAdmin kullanarak Tetikleyicileri Listeleme

) 1 Adım 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:

pgAdmin kullanarak Tetikleyicileri Listeleme

pgAdmin kullanarak Tetikleyicileri Bırakma

Company tablosuna example_trigger adlı tetikleyiciyi bırakmak için aşağıdaki komutu çalıştırın:

DROP TRIGGER example_trigger IF EXISTS
ON Company

ÖZET

  • A PostgreSQL tetikleyici, tablo gibi bir veritabanı nesnesinde bir veritabanı olayı meydana geldiğinde otomatik olarak tetiklenen bir işlevi ifade eder.
  • Bu tür veritabanı olaylarına örnek olarak INSERT, UPDATE, DELETE vb. verilebilir.
  • Bir tetikleyici yalnızca kendisi için oluşturulduğu veritabanı nesnesinin ömrü boyunca mevcuttur.
  • Veritabanı nesnesi silinirse tetikleyici de silinir.
  • PostgreSQL tetikleyiciler CREATE TRIGGER ifadesi kullanılarak oluşturulur.
  • Her tetikleyici, tetikleyicinin çağrıldığında ne yapacağını belirten bir işlevle ilişkilendirilir.

Bu Eğitimde kullanılan Veritabanını İndirin