2026/2/22 16:18:29
网站建设
项目流程
网站建设所需的基本条件,微信商城app,怎么使用网站上的模板,个体户查询系统官网文章目录 环境文档用途详细信息 环境
系统平台#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本#xff1a;4.3.2
文档用途
使用事件触发器审计表的alter table操作
详细信息
如果你要记录表被用户执行DDL#xff0c;修改定义, 设置默认值, 等等alter table可…文章目录环境文档用途详细信息环境系统平台Linux x86-64 Red Hat Enterprise Linux 7版本4.3.2文档用途使用事件触发器审计表的alter table操作详细信息如果你要记录表被用户执行DDL修改定义, 设置默认值, 等等alter table可以完成的工作时的记录, 可以使用事件触发器来达到这个目的.例子如下 :# create or replace function ef_alter() returns event_trigger as $$declarerec hstore;beginselecthstore(pg_stat_activity.*)intorecfrompg_stat_activitywherepidpg_backend_pid();insertintoaud_alter(ctx)values(rec);end;$$languageplpgsql strict;CREATEFUNCTIONtestdb# create event trigger e_alter on ddl_command_end when tag in (ALTER TABLE) execute procedure ef_alter();CREATEEVENTTRIGGERtestdb# create table aud_alter(id serial primary key, crt_time timestamp default now(), ctx hstore);CREATETABLEtestdb# create table test(id int);CREATETABLEtestdb# alter table test alter column id type int8;ALTERTABLEtestdb# select * from aud_alter;-[RECORD1]------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------id|1crt_time|2018-05-0313:44:12.309983ctx|pid9408,datid16384,queryalter table test alter column id type int8;,stateactive,datnametestdb,usenamepostgres,waitingf,usesysid10,xact_start2018-05-03 13:44:12.30998308,backend_xid8367,client_addrNULL,client_port-1,query_start2018-05-03 13:44:12.30998308,backend_xmin8367,state_change2018-05-03 13:44:12.30998508,backend_start2018-05-03 13:40:15.056108,client_hostnameNULL,application_namepsqltestdb# select each(ctx) from aud_alter where id1;each-------------------------------------------------------(pid,9408)(datid,16384)(query,alter table test alter column id type int8;)(state,active)(datname,testdb)(usename,postgres)(waiting,f)(usesysid,10)(xact_start,2018-05-03 13:44:12.30998308)(backend_xid,8367)(client_addr,)(client_port,-1)(query_start,2018-05-03 13:44:12.30998308)(backend_xmin,8367)(state_change,2018-05-03 13:44:12.30998508)(backend_start,2018-05-03 13:40:15.056108)(client_hostname,)(application_name,psql)(18rows)query即当时的ALTER TABLE SQL.其他辅助的还有用户当时的IP, PORT, 用户, 链接的数据库等信息。如果只想跟踪表的字段被修改的前后类型, 更严格的做法应该是从parsetree中取出被修改的字段, 类型。