すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ログオンとログオフトリガー

最終更新日:Jan 24, 2025

このトピックでは、ログオンとログオフのトリガーについて説明します。

概要

ログオントリガーとログオフトリガーはイベントトリガーであり、データベースにログオンしたりログオフしたりするときに、指定された関数またはストアドプロシージャをトリガーできます。 ログオンとは、データベースに接続したときにPostgresバックエンドプロセスが開始されることを意味します。 ログオフは、Logoffコマンドを開始したときにPostgresバックエンドプロセスが終了することを意味します。

構文

イベント名はafter_user_logonbefore_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

注意事項

  • 接続プールや接続プロキシなどのサードパーティ製ツールを使用している場合、クライアントが切断または接続されたときにログオンおよびログオフのトリガーがトリガーされることはありません。

  • 他のイベントトリガーと同様に、イベント (ログオンなど) に複数のトリガーがあり、トリガーの1つが失敗した場合、すべてのトリガーのアクションが終了し、トランザクションがロールバックされます。

  • ログオフトリガーがトリガーされてエラーが発生すると、エラーの詳細がログに生成されます。 エラーの詳細はログにのみ存在し、クライアントが終了したためにクライアントによって受信されない場合があります。 ログオントリガーがトリガーされてエラーが発生すると、クライアントの準備ができていないため、エラーの詳細がログに生成されます。 PolarDBは、次の警告メッセージをクライアントに送信しようとします。"ユーザーログイン後にイベントトリガーが発生します。 詳細については、「ログ」をご参照ください"

例:

説明

次の例では、パブリックスキーマを使用します。 スキーマに置き換えることができます。 次のステートメントを実行して、現在のスキーマを照会します。

SHOW search_path;
  • テスト用のデータを準備します。

    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;
  • ログイントリガーを作成します。

    CREATE EVENT TRIGGER login_event_trigger on after_user_logon
        EXECUTE PROCEDURE public.sample_event_trigger();
  • ログオフトリガーを作成します。

    CREATE EVENT TRIGGER logout_event_trigger on before_user_logoff
        EXECUTE PROCEDURE public.sample_event_trigger();
  • ログイントリガーを削除します。

    DROP EVENT TRIGGER login_event_trigger;
  • ログオフトリガーを削除します。

    DROP EVENT TRIGGER logout_event_trigger;