全部产品
Search
文档中心

PolarDB:Pemicu Logon dan Logoff

更新时间: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 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_logoff

Perhatian

  • 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

Catatan

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;