このトピックでは、ログオンとログオフのトリガーについて説明します。
概要
ログオントリガーとログオフトリガーはイベントトリガーであり、データベースにログオンしたりログオフしたりするときに、指定された関数またはストアドプロシージャをトリガーできます。 ログオンとは、データベースに接続したときにPostgresバックエンド
プロセスが開始されることを意味します。 ログオフは、Logoffコマンドを開始したときにPostgresバックエンド
プロセスが終了することを意味します。
構文
イベント名はafter_user_logon
と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
注意事項
接続プールや接続プロキシなどのサードパーティ製ツールを使用している場合、クライアントが切断または接続されたときにログオンおよびログオフのトリガーがトリガーされることはありません。
他のイベントトリガーと同様に、イベント (ログオンなど) に複数のトリガーがあり、トリガーの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;