Topik ini menjelaskan pemicu logon dan logoff.
Ikhtisar
Pemicu logon dan logoff adalah pemicu peristiwa yang dapat memicu fungsi atau prosedur tersimpan tertentu saat Anda masuk ke atau keluar dari database. Logon berarti bahwa proses Postgres backend dimulai ketika Anda terhubung ke database. Logoff berarti bahwa proses Postgres backend akan segera keluar ketika Anda memulai perintah logoff.
Sintaksis
Nama peristiwa adalah
AFTER LOGON ON DATABASE dan BEFORE LOGOFF ON DATABASE. CREATE EVENT TRIGGER nama_pemicu event_login_or_logoff
EXECUTE FUNCTION_or_PROCEDURE nama_func '(' ')'
event_login_or_logoff:
AFTER LOGON ON DATABASE
| BEFORE LOGOFF ON DATABASEPerhatian
- Jika Anda menggunakan alat pihak ketiga seperti kumpulan koneksi atau proxy koneksi, pemicu logon dan logoff mungkin tidak dipicu ketika klien terputus atau terhubung karena mereka hanya dipicu ketika proses backend dimulai atau keluar.
- Seperti pemicu peristiwa lainnya, jika suatu peristiwa (seperti logon) memiliki beberapa pemicu dan salah satu pemicu gagal, tindakan semua pemicu dihentikan dan transaksi dibatalkan.
- Ketika pemicu logoff dipicu dan terjadi kesalahan, rincian kesalahan dihasilkan dalam log. Rincian kesalahan mungkin hanya ada di log tetapi tidak diterima oleh klien karena klien telah keluar. Ketika pemicu logon dipicu dan terjadi kesalahan, rincian kesalahan dihasilkan dalam log karena klien belum siap. PolarDB mencoba mengirim pesan peringatan berikut ke klien:
"terjadi kesalahan pemicu peristiwa setelah pengguna masuk. Untuk informasi lebih lanjut, lihat log". - PolarDB kompatibel dengan variabel PL Oracle berikut untuk pemicu logon dan logoff:
- polar_login_user: nama pengguna yang digunakan untuk masuk ke database. Nilainya bertipe data TEXT.
- polar_database_name: nama database yang Anda masuki. Nilainya bertipe data TEXT.
- polar_instance_num: jumlah kluster yang Anda masuki. Nilainya adalah 1 dan bertipe data INT.
- polar_client_ip: alamat IP klien yang digunakan untuk masuk ke database. Nilainya bertipe data TEXT.
Contoh
- Siapkan data untuk pengujian.
CREATE TABLE users_log ( id serial, user_name VARCHAR2(64), database_name VARCHAR2(64), event VARCHAR2(64), client_ip VARCHAR2(64), tag VARCHAR2(64), instance_num int ); CREATE function sample_event_trigger return event_trigger is begin INSERT into polar_loginout.users_log (user_name,database_name,event,client_ip, tag, instance_num) values (polar_login_user,polar_database_name,tg_event,polar_client_ip,tg_tag,polar_instance_num); end; - Buat pemicu logon.
CREATE EVENT TRIGGER hr.logon_trigger AFTER LOGON ON DATABASE execute function public.sample_event_trigger(); - Buat pemicu logoff.
CREATE EVENT TRIGGER hr.logoff_trigger BEFORE LOGOFF ON DATABASE execute function public.sample_event_trigger(); - Hapus pemicu logon.
DROP event trigger logon_trigger; - Hapus pemicu logoff.
DROP event trigger logoff_trigger;