PostgreSQL - Triggers: Panduan Kawan Anda ke Automatisasi Database
Hai daar, para ahli basisdata masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia trigger PostgreSQL. Jangan khawatir jika Anda baru dalam pemrograman - saya akan menjadi panduan andalan Anda, dan kita akan mengexplorekan topik ini langkah demi langkah. Pada akhir panduan ini, Anda akan dapat membuat trigger seperti seorang pro!
Apa Itu Trigger?
Sebelum kita masuk ke hal-hal teknis, mari kita mengerti apa trigger itu. Bayangkan Anda memiliki butler setia yang secara otomatis melakukan tugas tertentu saat terjadi peristiwa khusus di rumah Anda. Itu sebetulnya apa yang trigger lakukan di basisdata!
Trigger adalah jenis prosedur yang disimpan khusus yang secara otomatis dieksekusi saat terjadi peristiwa tertentu di basisdata. Peristiwa ini bisa berupa hal seperti memasukkan, memperbarui, atau menghapus data dari tabel.
Sintaks: Blueprint Trigger
Sekarang, mari kita lihat sintaks dasar untuk membuat trigger di PostgreSQL. Jangan khawatir jika terlihat agak menakutkan pertama kali - kita akan membongkar itu bersamaan!
CREATE TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE}
ON table_name
[FOR [EACH] {ROW | STATEMENT}]
EXECUTE FUNCTION trigger_function();
Mari kitauraikan sintaks ini:
-
CREATE TRIGGER trigger_name
: Ini adalah tempat Anda memberi nama ke trigger Anda. -
{BEFORE | AFTER | INSTEAD OF}
: Ini menentukan kapan trigger harus dinyalakan - sebelum, setelah, atau sebagai pengganti peristiwa. -
{INSERT | UPDATE | DELETE}
: Ini menentukan peristiwa apa yang mengaktifkan trigger. -
ON table_name
: Ini menentukan tabel mana trigger terkait. -
[FOR [EACH] {ROW | STATEMENT}]
: Ini menentukan apakah trigger dinyalakan sekali untuk keseluruhan pernyataan atau untuk setiap baris yang terpengaruh. -
EXECUTE FUNCTION trigger_function()
: Ini menentukan fungsi yang dieksekusi saat trigger dinyalakan.
Contoh: Mari Buat Trigger!
Sekarang kita mengerti sintaks, mari kita buat trigger sederhana. Bayangkan kita memiliki tabel customers
, dan kita ingin catat setiap perubahan yang dibuat pada informasi pelanggan.
Pertama, mari kita buat tabel customers
dan customer_logs
:
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE customer_logs (
id SERIAL PRIMARY KEY,
customer_id INTEGER,
old_name VARCHAR(100),
new_name VARCHAR(100),
changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Sekarang, mari kita buat fungsi trigger:
CREATE OR REPLACE FUNCTION log_customer_changes()
RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'UPDATE') THEN
INSERT INTO customer_logs (customer_id, old_name, new_name)
VALUES (OLD.id, OLD.name, NEW.name);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Fungsi ini memeriksa jika operasi adalah UPDATE, dan jika begitu, ia mencatat perubahan di tabel customer_logs
.
Akhirnya, mari kita buat trigger kami:
CREATE TRIGGER customer_changes
AFTER UPDATE ON customers
FOR EACH ROW
EXECUTE FUNCTION log_customer_changes();
Sekarang, setiap kali nama pelanggan diperbarui, trigger kami akan secara otomatis mencatat perubahan!
Mari kita uji:
INSERT INTO customers (name, email) VALUES ('John Doe', '[email protected]');
UPDATE customers SET name = 'John Smith' WHERE id = 1;
SELECT * FROM customer_logs;
Anda seharusnya melihat entri baru di tabel customer_logs
, menunjukkan perubahan nama dari 'John Doe' ke 'John Smith'!
Mengelola Trigger: Mengambil Inventory
Sekarang basisdata Anda tumbuh, Anda mungkin ingin memeriksa trigger apa yang Anda punyai. PostgreSQL membuat ini mudah dengan query sederhana:
SELECT * FROM information_schema.triggers;
Ini akan memberikan Anda daftar semua trigger di basisdata Anda, termasuk nama mereka, tabel yang terkait, dan kapan mereka dinyalakan.
Untuk pandangan lebih spesifik trigger di tabel tertentu, Anda dapat menggunakan:
SELECT tgname FROM pg_trigger WHERE tgrelid = 'table_name'::regclass;
Ganti 'table_name' dengan nama tabel Anda.
Menghapus Trigger: Waktu untuk Berkata Goodbye
kadang-kadang, Anda mungkin perlu menghapus trigger. Sintaks untuk ini cukup sederhana:
DROP TRIGGER trigger_name ON table_name;
Contohnya, untuk menghapus trigger customer_changes
:
DROP TRIGGER customer_changes ON customers;
Selalu berhati-hati saat menghapus trigger, karena ini dapat mempengaruhi proses otomatis di basisdata Anda!
Kesimpulan: Anda Sekarang Ahli Trigger!
Selamat! Anda telah belajar dasar trigger PostgreSQL. Kita telah meliputi apa itu trigger, cara membuatnya, cara mengelolanya, dan cara menghapusnya. Ingat, trigger adalah alat kuat yang dapat mengautomatisasi banyak tugas basisdata, tapi gunakanlah mereka bijaksana - terlalu banyak trigger bisa mengurangi kecepatan operasi basisdata Anda.
Sekarang Anda teruskan perjalanan PostgreSQL Anda, Anda akan menemukan banyak fitur menarik lainnya. Terus latihan, tetap bersemangat, dan terutama, bersenang-senang dengan basisdata Anda!
Berikut adalah tabel rujukan metode yang kita pelajari:
Metode | Sintaks | Deskripsi |
---|---|---|
Buat Trigger | CREATE TRIGGER... |
Membuat trigger baru |
Daftar Semua Trigger | SELECT * FROM information_schema.triggers; |
Mendftar semua trigger di basisdata |
Daftar Trigger di Tabel | SELECT tgname FROM pg_trigger WHERE tgrelid = 'table_name'::regclass; |
Mendftar trigger di tabel tertentu |
Hapus Trigger | DROP TRIGGER trigger_name ON table_name; |
Menghapus trigger |
Selamat menarik trigger, para ahli basisdata masa depan!
Credits: Image by storyset