Di kerajaan tertentu, dalam kondisi tertentu ... Saya perlu menambahkan pemicu ke model di
pgModeler . Apa yang harus dilakukan cukup mudah. Tetapi untuk menambahkan fungsi pemicu ... Ini juga mudah, tetapi saya harus berurusan sedikit dengan parameter yang ditawarkan untuk pengisian / pemilihan di antarmuka.
pgModeler adalah alat desain database yang sangat baik yang dapat menghasilkan skrip sql untuk
PostgreSQL . Rincian tentang alat ini dan kemampuannya dapat ditemukan di situs
web resmi.
Sebagai contoh, pertimbangkan model yang disederhanakan dengan satu tabel.

Tambahkan fungsi ke model.

Setelah itu, sebuah jendela akan terbuka dengan berbagai parameter yang dapat diedit yang dengannya fungsi tersebut akan dibuat. Namun, beberapa bidang sudah akan diisi dengan nilai default.

Mari kita pertimbangkan parameter ini lebih terinci.
Saya pikir dengan parameter
Nama ,
Skema ,
Pemilik dan
Komentar semuanya jelas - ini adalah nama fungsi, skema basis data, pemilik dan komentar untuk fungsi ini, masing-masing.
Bahasa adalah nama bahasa di mana fungsi akan dilaksanakan. Sejujurnya, saya tidak pernah harus menulis fungsi untuk
PostgreSQL pada hal lain selain
plpgsql . Oleh karena itu, nilai ini untuk parameter yang saya pilih.
Kembali metode Karena dalam fungsi pemicu kami tidak perlu mengembalikan tabel atau sekumpulan nilai, kami meninggalkan
Simple .
Dengan parameter di blok
Tipe Data , secara umum, semuanya juga sederhana. Karena Jika fungsi ini dipanggil di trigger, maka di kolom
Type kita tentukan
trigger (kolom
Format akan diisi secara otomatis dengan nilai
trigger ). Bidang
Dimensi (satu-satunya bidang digital yang tidak dicadangkan di blok ini) diperlukan untuk menunjukkan dimensi array nilai yang dikembalikan. Tapi karena kita hanya perlu satu nilai, bukan array, kita meninggalkan
0 di bidang ini.
Dengan parameter yang tersisa, semuanya tidak begitu jelas, setidaknya bagi saya, karena tidak pernah memikirkannya selama pembuatan fungsi-fungsi biasa di
PostgreSQL .
Jenis Fungsi dapat mengambil salah satu dari tiga nilai:
IMMUTABLE ,
STABLE dan
VOLATILE . Dari
dokumentasi resmi
PostgreSQL , Anda dapat mengetahui bahwa argumen ini menginformasikan optimizer kueri tentang perilaku fungsi.
- IMMUTABLE berarti bahwa fungsi tidak dapat memodifikasi database dan selalu mengembalikan hasil yang sama untuk nilai argumen tertentu.
- STABEL berarti bahwa fungsi tidak dapat memodifikasi database, dan dalam pemindaian tabel tunggal, ia selalu mengembalikan hasil yang sama untuk nilai argumen tertentu.
- VOLATILE berarti bahwa hasil suatu fungsi dapat berubah bahkan dalam satu pemindaian tabel, sehingga panggilannya tidak dapat dioptimalkan.
Dengan demikian, jika fungsi pemicu memerlukan perubahan basis data, maka
IMMUTABLE tidak cocok. Fungsi dengan parameter
STABLE tidak cocok untuk pemicu
SETELAH yang ingin membaca baris yang dimodifikasi oleh perintah saat ini. Masih ada
VOLATILE , yang tidak memiliki masalah di atas. Ini juga akan ditentukan secara default jika tidak ada argumen di atas yang ditentukan saat membuat fungsi.
Keamanan dapat mengambil salah satu dari dua nilai:
SECURITY DEFINER dan
SECURITY INVOKER dan bertanggung jawab atas hak pengguna yang akan dipanggil.
- DEFINER KEAMANAN berarti bahwa fungsi tersebut akan dieksekusi dengan hak-hak pengguna yang memilikinya, mis. orang yang terdaftar di Pemilik .
- SECURITY INVOKER berarti bahwa fungsi tersebut akan dieksekusi dengan hak-hak pengguna yang memanggilnya.
Secara default,
SECURITY INVOKER digunakan , sehingga Anda dapat meninggalkannya.
Perilaku dapat mengambil salah satu dari tiga nilai:
STRICT ,
RETURNS NULL ON NULL INPUT dan
CALLED ON NULL INPUT dan menunjukkan bagaimana fungsi akan berperilaku jika ada nilai NULL di antara argumennya.
- RETURNS NULL ON NULL INPUT atau STRICT berarti bahwa fungsi akan selalu mengembalikan NULL jika setidaknya salah satu argumennya adalah NULL.
- DISEBUT DI NULL INPUT berarti bahwa fungsi akan dipanggil seperti biasa, bahkan jika NULL adalah salah satu argumennya.
Standarnya adalah
CALLED ON NULL INPUT . Karena itu, dengan cara yang sama, Anda dapat meninggalkannya.
Rows Returned menunjukkan jumlah baris yang diharapkan penjadwal. Nilai ditentukan untuk fungsi yang mengembalikan set. Karena fungsi kami mengembalikan nilai tunggal, kami meninggalkan
0 .
Biaya Eksekusi menetapkan biaya untuk menjalankan fungsi ini untuk penjadwal. Untuk
plpgsql , standarnya adalah
100 . Oleh karena itu, kami menunjukkan nilai ini.
Fungsi Windown. berarti bahwa fungsi jendela akan dibuat. Dalam kasus kami, karena kita membutuhkan fungsi pemicu, kita tidak perlu menentukan nilai ini (well, secara umum, mereka menulis dalam dokumentasi itu sendiri bahwa masuk akal untuk menentukan parameter ini hanya untuk fungsi yang ditulis dalam C).
Anti bocor menunjukkan bahwa fungsinya disegel, mis. bahwa ia tidak mengungkapkan informasi tentang argumennya (misalnya, itu tidak menampilkan artinya dalam pesan kesalahan), kecuali untuk mengembalikan hasil. Karena Karena fungsi pemicu tidak menerima argumen, parameter ini tidak perlu ditentukan.
Jadi, parameter fungsi sudah berakhir. Badan fungsi itu sendiri dapat ditulis di jendela yang sama pada tab Definisi. Kami terus membuat pemicu itu sendiri.

Setelah itu, jendela pembuatan pemicu akan muncul.

Pertimbangkan parameter yang dapat diatur di jendela ini.
Dengan parameter
Nama ,
Alias , dan
Komentar, sekali lagi, semuanya jelas - ini adalah nama pemicu, alias, dan komentar masing-masing.
Pengecualian menunjukkan bagaimana pemicu ini akan dieksekusi dan dapat mengambil salah satu dari nilai berikut:
SEBELUM ,
SETELAH, dan
BUKAN DARI , yang berarti bahwa fungsi akan dieksekusi sebelum, setelah, atau bukan acara.
UNTUK SETIAP BARIS menentukan apakah prosedur pemicu akan menyala sekali untuk setiap baris. Jika tidak ditentukan, parameter
UNTUK SETIAP PERNYATAAN akan ditetapkan, yang menentukan bahwa prosedur pemicu dipicu sekali untuk pernyataan SQL.
Acara menentukan acara apa yang perlu diproses dalam pemicu ini. Anda dapat menentukan beberapa acara. Acara adalah dari jenis berikut:
INSERT ,
UPDATE ,
DELETE, dan
TRUNCATE . Mereka terjadi ketika perintah yang sesuai dengan pernyataan SQL yang sama dipanggil.
Batasan menunjukkan bahwa pemicu batasan akan dibuat. Pemicu kendala digunakan untuk melempar pengecualian ketika kendala dilanggar. Anda dapat membaca lebih lanjut tentang mereka di
dokumentasi resmi.
Untuk pemicu pembatasan, Anda dapat menentukan
Ditangguhkan , yang menentukan waktu pemicu. Parameter ini dapat mengambil salah satu dari nilai-nilai berikut:
SEGERA DITERBITKAN atau
DITANGGUNG AWAL .
- SEGERA AWAL artinya pemicu akan aktif setelah setiap pernyataan.
- DITANGGUHKAN AWAL berarti pemicu hanya akan aktif di akhir transaksi.
Lihat. Tabel adalah nama tabel yang dirujuk oleh kendala. Digunakan untuk batasan kunci asing dan hanya diizinkan untuk pemicu kendala.
Kondisi adalah kondisi yang menentukan apakah fungsi pemicu akan dieksekusi. Untuk pemicu
FOR EACH ROW di bidang ini, Anda dapat mengakses nilai lama dan baru masing-masing melalui
TUA dan
BARU (mis., Sama seperti di tubuh fungsi pemicu).
Argumen - daftar argumen yang akan diteruskan ke fungsi pemicu saat memicu. Konstanta string dilewatkan sebagai argumen ke fungsi.
Kolom - hanya dapat ditentukan untuk acara
UPDATE . Pemicu hanya akan berfungsi jika setidaknya salah satu kolom yang ditentukan ada di daftar kolom yang ditentukan dalam
UPDATE .
Kesimpulan
Itu, secara umum, itu saja. Saya harap ini menarik dan akan bermanfaat bagi seseorang.
Saat menulis artikel ini, pgModeler versi 0.9.2-alpha,
dibangun di bawah Windows 7 x64, digunakan. Saat menggunakan pgModeler versi yang lebih lama / lebih baru, ada sedikit perbedaan pada antarmuka.
Model yang digunakan dalam artikel dapat diunduh di
sini .