本文介绍了登录触发器和登出触发器功能。
简介
登录登出触发器是一种事件触发器,提供了可以在用户登录/登出时触发指定函数或存储过程的功能。登录是指用户直接连接到数据库时,Postgres backend
进程启动后。登出是指用户在发起退出命令时,Postgres backend
进程退出前。
语法
event name分别为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
注意事项
如果使用了连接池、连接代理等第三方工具,由于是在backend进程启动和退出时才会触发这两种触发器,可能导致在客户端断开或连接时不能及时触发。
和其他事件触发器相同,对于同一个事件,例如登录,拥有多个触发器时,其中一个失败了,所有触发器的行为都会被终止且进行事务回滚。
登出触发器触发时,出现错误后,会将错误详细信息打印到log中,因为此时客户端可能已经退出,导致无法输出到客户端,因此仅仅输出到log。同理,登录触发器触发时,由于客户端未准备好,所以也需要将错误详细信息打印到log中,此时PolarDB会尝试向客户端发送一个waring:
event trigger occur error after user login. For more information, see log.
。
示例
说明
当前示例所使用的Schema为public。请使用您当前的Schema,可以通过以下语句进行查询。
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;
该文章对您有帮助吗?