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 proses Postgres backend dimulai ketika Anda terhubung ke database. Logoff berarti proses Postgres backend akan segera keluar ketika Anda memulai perintah logoff.
Sintaksis
Nama peristiwa adalah after_user_logon dan before_user_logoff.
CREATE EVENT TRIGGER trigger_name event_login_or_logoff
EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')'
event_login_or_logoff:
on after_user_logon
| on before_user_logoffPerhatian
Jika menggunakan alat pihak ketiga seperti kumpulan koneksi atau proxy koneksi, pemicu logon dan logoff mungkin tidak dipicu ketika klien terputus atau terhubung karena hanya dipicu saat proses backend dimulai atau keluar.
Seperti pemicu peristiwa lainnya, jika sebuah peristiwa (seperti logon) memiliki beberapa pemicu dan salah satu pemicunya gagal, tindakan semua pemicu dihentikan dan transaksi dibatalkan.
Ketika pemicu logoff dipicu dan terjadi kesalahan, detail kesalahan dicatat dalam log. Detail kesalahan mungkin hanya ada di log tetapi tidak diterima oleh klien karena klien telah keluar. Ketika pemicu logon dipicu dan terjadi kesalahan, detail kesalahan juga dicatat dalam log karena klien belum siap. PolarDB mencoba mengirim pesan peringatan berikut ke klien:
"event trigger occur error after user login. For more information, see log".
Contoh
Skema publik digunakan dalam contoh berikut. Anda dapat menggantinya dengan skema Anda sendiri. Jalankan pernyataan berikut untuk menanyakan skema saat ini.
SHOW search_path;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 login_event_trigger on after_user_logon EXECUTE PROCEDURE public.sample_event_trigger();Buat pemicu logoff.
CREATE EVENT TRIGGER logout_event_trigger on before_user_logoff EXECUTE PROCEDURE public.sample_event_trigger();Hapus pemicu logon.
DROP EVENT TRIGGER login_event_trigger;Hapus pemicu logoff.
DROP EVENT TRIGGER logout_event_trigger;