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

⚡ Akıllı Özet

PostgreSQL Tetikleyiciler, bir tabloda INSERT, UPDATE veya DELETE olayı gerçekleştiğinde otomatik olarak çalışan fonksiyonlardır ve veritabanının ek uygulama koduna gerek kalmadan kuralları uygulamasına, değişiklikleri kaydetmesine ve verileri denetlemesine olanak tanır.

  • Tanım: Tetikleyici, INSERT, UPDATE veya DELETE gibi bir veritabanı olayında otomatik olarak çağrılan bir fonksiyondur.
  • 🔁 Dürbün: FOR EACH ROW, tetikleyiciyi etkilenen her satır için bir kez çalıştırırken, FOR EACH STATEMENT ise her işlem için bir kez çalıştırır.
  • Yaratmak: CREATE TRIGGER, bir fonksiyonu bir tabloya bağlar ve BEFORE, AFTER veya INSTEAD OF zamanlamasını ayarlar.
  • ???? Liste: Veritabanındaki tüm tetikleyicileri görmek için SELECT tgname komutuyla pg_trigger kataloğunu sorgulayın.
  • 🗑️ Düşürmek: DROP TRIGGER komutu bir tetikleyiciyi kaldırır ve IF EXISTS komutu ise tetikleyici eksik olduğunda hata oluşmasını önler.
  • 🤖 Yapay Zeka Yardımı: Yapay zekâ asistanları, basit bir dille yapılan istekten yola çıkarak tetikleme fonksiyonları oluşturur ve ÖNCE veya SONRA zamanlama önerilerinde bulunur.

PostgreSQL tetikleyiciler

Tetikleyici Nedir? PostgreSQL?

A PostgreSQL Tetik Tetikleyici, bir veritabanı nesnesinde (örneğin bir tabloda) bir veritabanı olayı meydana geldiğinde otomatik olarak tetiklenen bir fonksiyondur. 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 kaldırılır.

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

Bir tetikleyici, oluşturulurken FOR EACH ROW operatörü ile işaretlenebilir. Bu tür bir tetikleyici, işlem tarafından değiştirilen her satır için bir kez çağrılır. Bir tetikleyici, oluşturulurken FOR EACH STATEMENT operatörü ile de işaretlenebilir. Bu tetikleyici, yalnızca belirli bir işlem için bir kez çalıştırılır.

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.

Tetikleyici fonksiyonumuzu oluşturduğumuza göre, bunu Fiyat tablosuna bağlamamız gerekiyor. Tetikleyiciye price_trigger adını vereceğiz. Yeni bir kayıt oluşturulmadan önce, değişiklikleri kaydetmek için tetikleyici fonksiyon 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);

Şimdi Fiyat tablosuna bir kayıt eklediğimize göre, oluşturduğumuz tetikleyici nedeniyle Fiyat_Denetimleri tablosuna da bir kayıt eklenmelidir. Bunu kontrol edelim:

SELECT * FROM Price_Audits;

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

PostgreSQL Tetikleyici oluşturma

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

PostgreSQL Liste 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:

PostgreSQL Liste Tetikleyicisi

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

PostgreSQL Düşürme Tetikleyicisi

Bir tetikleyiciye artık ihtiyaç duyulmadığında, onu aynı kolaylıkla kaldırabilirsiniz. Bir tetikleyiciyi silmek 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:

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 bu üç işlemin pgAdmin kullanılarak nasıl gerçekleştirildiğine bakalım.

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

İşte tetikleyici oluşturmanın yolu: PostgreSQL pgAdmin'i kullanarak:

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

pgAdmin'i açın ve giriş bilgilerinizle 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 düzenleyiciye şu sorguyu 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) Çalıştırın Code denetim fonksiyonu için

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) Çalıştırın Code tetikleyici oluşturmak

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)
  1. 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

Şimdi de Price_Audits tablosunun içeriğini inceleyelim.

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

Damlaping pgAdmin kullanarak tetikleyiciler

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

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

SSS

ÖNCE tetikleyici, satır değişikliği yazılmadan önce çalışır, böylece satırı değiştirebilir veya reddedebilir. SONRA tetikleyici ise değişiklik kaydedildikten sonra çalışır ve günlük kaydı ve denetim görevlerine uygundur.

INSTEAD OF tetikleyicisi bir tablo üzerinde değil, bir görünüm üzerinde tanımlanır. INSERT, UPDATE veya DELETE komutlarını özel mantıkla değiştirerek salt okunur bir görünümü yazılabilir hale getirir.

Tetikleyici fonksiyonlar genellikle PL/pgSQL dilinde yazılır. PostgreSQL PL'yi de destekler.PythonPL/Perl, PL/Tcl ve C dilleri arasından mantığınıza uygun olanı seçebilirsiniz.

ALTER TABLE table-name DISABLE TRIGGER trigger-name komutunu kullanarak devre dışı bırakabilir, ENABLE TRIGGER komutunu kullanarak ise tekrar etkinleştirebilirsiniz. Bu, veri kaybını önler.ping ve toplu yüklemeler sırasında tetikleyiciyi yeniden oluşturmak.

Evet. Her tetikleyici, etkilenen her satıra veya ifadeye ek iş yükü getirir; bu nedenle yoğun tetikleyici mantığı yazma işlemlerini yavaşlatabilir. Tetikleyici fonksiyonlarını kısa tutun ve sorguladıkları sütunları indeksleyin.

Evet. Bir tetikleyici, içinde tetikleyiciler bulunan başka bir tabloyu değiştirirse, bunlar da tetiklenir ve zincirleme tetikleyiciler oluşur. PostgreSQL Sonsuz döngüleri önlemek için iç içe geçme derinliğini sınırlar.

Yapay zekâ kodlama asistanları, sade bir dildeki isteği eksiksiz bir CREATE TRIGGER ifadesine ve tetikleyici fonksiyona dönüştürür, BEFORE veya AFTER zamanlaması önerir ve hızlı inceleme için oluşturulan PL/pgSQL kodunu açıklar.

Evet. PGAI ve GPT tabanlı yardımcılar gibi araçlar, tanımlanan bir kuralı tetikleyici SQL'e çevirir ve yeni veriler geldikçe otomatik olarak etiketleyen veya doğrulayan INSERT tetikleyicileri oluşturabilir.

Bu yazıyı şu şekilde özetleyin: