All Products
Search
Document Center

PolarDB:Pemicu Logon dan Logoff

Last Updated:Jul 02, 2025

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 DATABASE

Perhatian

  • 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;