Pencetus PostgreSQL: Buat, Jatuhkan Contoh

Isi kandungan:

Anonim

Apakah Pencetus Postgresql?

Pencetus PostgreSQL adalah fungsi yang dipicu secara automatik ketika peristiwa pangkalan data terjadi pada objek pangkalan data. Contohnya, jadual.

Contoh peristiwa pangkalan data yang dapat mengaktifkan pencetus termasuk INSERT, UPDATE, DELETE, dll. Lebih-lebih lagi, apabila anda membuat pencetus untuk jadual, pemicu akan dijatuhkan secara automatik apabila jadual itu dihapus.

Dalam Tutorial PostgreSQL ini, anda akan mempelajari perkara berikut:

  • Apakah Pencetus Postgresql?
  • Bagaimana Trigger digunakan dalam POSRGREQL?
  • Membuat Pencetus
  • Menggunakan pgAdmin
  • Pencetus Menjatuhkan

Bagaimana Trigger digunakan dalam POSRGREQL?

Pencetus boleh ditandakan dengan pengendali UNTUK SETIAP ROW semasa pembuatannya. Pencetus sedemikian akan dipanggil sekali untuk setiap baris yang diubah oleh operasi. Pencetus juga boleh ditandakan dengan operator UNTUK SETIAP PERNYATAAN semasa penciptaannya. Pencetus ini akan dilaksanakan hanya sekali untuk operasi tertentu.

Membuat Pencetus

Untuk membuat pencetus, kami menggunakan fungsi CREATE TRIGGER. Berikut adalah sintaks untuk fungsi:

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

Nama pencetus adalah nama pencetus.

SEBELUM, SELEPAS dan INSTEAD OF adalah kata kunci yang menentukan bila pencetus akan dipanggil.

Event-name adalah nama acara yang akan menyebabkan pemicu dipanggil. Ini boleh MASUK, KEMASKINI, HAPUS, dll.

Nama jadual adalah nama jadual di mana pencetus hendak dibuat.

Sekiranya pencetus dibuat untuk operasi INSERT, kita mesti menambahkan parameter nama lajur ON.

Sintaks berikut menunjukkan ini:

CREATE TRIGGER trigger-name AFTER INSERT ON column-nameON table-name[-- Trigger logic];

Sebagai contoh:

Kami akan menggunakan jadual Harga yang diberikan di bawah:

Harga:

Mari kita buat jadual lain, Price_Audits, di mana kita akan mencatat perubahan yang dibuat pada jadual Harga:

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

Kita sekarang dapat menentukan fungsi baru bernama auditfunc:

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;

Fungsi di atas akan memasukkan rekod ke dalam Jadual Price_Audits termasuk id baris baru dan masa rekod dibuat.

Sekarang kita mempunyai fungsi pencetus, kita harus mengikatnya ke jadual Harga kita. Kami akan memberikan nama pemicu price_trigger. Sebelum catatan baru dibuat, fungsi pemicu akan dipanggil secara automatik untuk mencatat perubahan. Inilah pencetus:

CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();

Mari kita masukkan rekod baru ke dalam jadual Harga:

INSERT INTO PriceVALUES (3, 400);

Sekarang kita telah memasukkan rekod ke dalam jadual Harga, satu catatan juga harus dimasukkan ke dalam jadual Price_Audit. Ini akan menjadi akibat daripada pencetus yang telah kita buat pada jadual Harga. Mari kita periksa ini:

SELECT * FROM Price_Audits;

Ini akan mengembalikan perkara berikut:

Pencetus berjaya.

Pencetus penyenaraian

Semua pencetus yang anda buat di PostgreSQL disimpan dalam jadual pg_trigger. Untuk melihat senarai pemicu yang ada pada pangkalan data, tanyakan jadual dengan menjalankan perintah SELECT seperti yang ditunjukkan di bawah:

SELECT tgname FROM pg_trigger;

Ini mengembalikan perkara berikut:

Lajur tgname dari jadual pg_trigger menunjukkan nama pencetus.

Pencetus jatuh

Untuk menjatuhkan pencetus PostgreSQL, kami menggunakan pernyataan DROP TRIGGER dengan sintaks berikut:

DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];

Parameter nama pencetus menunjukkan nama pemicu yang hendak dihapuskan.

Nama jadual menunjukkan nama jadual dari mana pencetus hendak dihapuskan.

Klausa JIKA ADA cuba menghapus pencetus yang ada. Sekiranya anda cuba menghapus pencetus yang tidak wujud tanpa menggunakan klausa JIKA ADA, anda akan mendapat ralat.

Pilihan CASCADE akan membantu anda menjatuhkan semua objek yang bergantung pada pencetus secara automatik.

Sekiranya anda menggunakan pilihan TERHAD, pencetus tidak akan dihapuskan jika objek bergantung padanya.

Sebagai contoh:

Untuk memadamkan pencetus bernama example_trigger pada jadual Harga, kami menjalankan perintah berikut:

Untuk menjatuhkan pencetus bernama example_trigger di atas meja Syarikat, jalankan arahan berikut:

DROP TRIGGER example_trigger IF EXISTSON Company;

Menggunakan pgAdmin

Sekarang mari kita lihat bagaimana ketiga-tiga tindakan dilakukan menggunakan pgAdmin.

Membuat Pencetus

Untuk mencapai perkara yang sama melalui pgAdmin, lakukan ini:

Langkah 1) Log masuk ke akaun pgAdmin anda.

Langkah 2)

  1. Dari bar navigasi di sebelah kiri- Klik Pangkalan Data.
  2. Klik Demo.

Langkah 3) Untuk membuat jadual Price_Audits, ketik editor pertanyaan:

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

Langkah 4) Klik butang Laksanakan.

Langkah 5) Jalankan kod berikut untuk menentukan fungsi auditfunc:

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

Langkah 6) Jalankan kod berikut untuk membuat trigger price_trigger:

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

Langkah 7)

  1. Jalankan arahan berikut untuk memasukkan rekod baru ke dalam jadual Harga:
    INSERT INTO PriceVALUES (3, 400)
  2. Jalankan arahan berikut untuk memeriksa sama ada rekod dimasukkan ke dalam jadual Price_Audits:
    SELECT * FROM Price_Audits

    Ini harus mengembalikan yang berikut:

Langkah 8) Mari kita periksa kandungan jadual Price_Audits:

Pencetus penyenaraian

Langkah 1) Jalankan arahan berikut untuk memeriksa pencetus dalam pangkalan data anda:

SELECT tgname FROM pg_trigger

Ini mengembalikan perkara berikut:

Pencetus Menjatuhkan

Untuk menjatuhkan pencetus bernama example_trigger di atas meja Syarikat, jalankan arahan berikut:

DROP TRIGGER example_trigger IF EXISTSON Company

Ringkasan:

  • Pencetus PostgreSQL merujuk pada fungsi yang dipicu secara otomatis ketika peristiwa pangkalan data terjadi pada objek pangkalan data, seperti tabel.
  • Contoh peristiwa pangkalan data seperti INSERT, UPDATE, DELETE, dll.
  • Pencetus hanya ada sepanjang hayat objek pangkalan data yang dibuatnya.
  • Sekiranya objek pangkalan data dihapus, pemicu juga akan dihapus.
  • Pencetus PostgreSQL dibuat menggunakan pernyataan CREATE TRIGGER.
  • Setiap pemicu dikaitkan dengan fungsi yang menyatakan apa yang akan dilakukan oleh pemicu ketika dipanggil.

Muat turun Pangkalan Data yang digunakan dalam Tutorial ini