このトピックでは、ログオンとログオフのトリガーについて説明します。
概要
ログオントリガーとログオフトリガーはイベントトリガーであり、データベースにログオンしたりログオフしたりするときに、指定された関数またはストアドプロシージャをトリガーできます。 ログオンとは、データベースに接続したときにPostgresバックエンドプロセスが開始されることを意味します。 ログオフは、Logoffコマンドを開始したときにPostgresバックエンドプロセスが終了することを意味します。
構文
イベント名はAFTER LOGON ON DATABASEとBEFORE LOGOFF ON DATABASEです。
CREATE EVENT TRIGGER trigger_name event_login_or_logoff
EXECUTE FUNCTION_or_PROCEDURE func_name '(' ')'
event_login_or_logoff:
AFTER LOGON ON DATABASE
| BEFORE LOGOFF ON DATABASE注意事項
接続プールや接続プロキシなどのサードパーティ製ツールを使用している場合、クライアントが切断または接続されたときにログオンおよびログオフのトリガーがトリガーされることはありません。
他のイベントトリガーと同様に、イベント (ログオンなど) に複数のトリガーがあり、トリガーの1つが失敗した場合、すべてのトリガーのアクションが終了し、トランザクションがロールバックされます。
ログオフトリガーがトリガーされてエラーが発生すると、エラーの詳細がログに生成されます。 エラーの詳細はログにのみ存在し、クライアントが終了したためにクライアントによって受信されない場合があります。 ログオントリガーがトリガーされてエラーが発生すると、クライアントの準備ができていないため、エラーの詳細がログに生成されます。 PolarDBは、次の警告メッセージをクライアントに送信しようとします。
"event trigger occur error after user login. For more information, see log"をご参照ください。PolarDBは、ログオンおよびログオフトリガ用の次のOracle PL変数と互換性があります。
polar_login_user: データベースへのログインに使用されるユーザー名。 値はTEXTデータ型です。
polar_database_name: ログインするデータベースの名前。 値はTEXTデータ型です。
polar_instance_num: ログインするクラスターの数。 値は1で、INTデータ型です。
polar_client_ip: データベースへのログインに使用されるクライアントIPアドレス。 値はTEXTデータ型です。
例
テスト用のデータを準備します。
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 hr.logon_trigger AFTER LOGON ON DATABASE execute function public.sample_event_trigger();ログオフトリガーを作成します。
CREATE EVENT TRIGGER hr.logoff_trigger BEFORE LOGOFF ON DATABASE execute function public.sample_event_trigger();ログイントリガーを削除します。
DROP event trigger logon_trigger;ログオフトリガーを削除します。
DROP event trigger logoff_trigger;