From 64ea1f6589efc18547c48e620f2adf61ee12cdc2 Mon Sep 17 00:00:00 2001 From: luozihao <1165977584@qq.com> Date: Tue, 9 May 2023 21:08:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AE=A1=E8=AE=A1=E4=B8=AD?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E8=A7=A6=E5=8F=91=E5=99=A8=E8=AE=B0=E5=BD=95?= =?UTF-8?q?object=5Fname=E7=9A=84=E4=B9=B1=E7=A0=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/process/tcop/auditfuncs.cpp | 2 +- .../regress/input/hw_audit_detailinfo.source | 27 ++++++++++++++++ .../regress/output/hw_audit_detailinfo.source | 32 +++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/gausskernel/process/tcop/auditfuncs.cpp b/src/gausskernel/process/tcop/auditfuncs.cpp index 4d62d6d9c..7344038cc 100644 --- a/src/gausskernel/process/tcop/auditfuncs.cpp +++ b/src/gausskernel/process/tcop/auditfuncs.cpp @@ -1157,7 +1157,7 @@ static void pgaudit_process_drop_objects(Node* node, const char* querystring) pgaudit_ddl_schema(objectname, querystring); } break; case OBJECT_TRIGGER: { - objectname = strVal(lfirst(list_tail(names))); + objectname = strVal(lfirst(list_tail((List*)lfirst(list_tail(names))))); pgaudit_ddl_trigger(objectname, querystring); } break; case OBJECT_FUNCTION: { diff --git a/src/test/regress/input/hw_audit_detailinfo.source b/src/test/regress/input/hw_audit_detailinfo.source index edebe4d69..ea277094a 100644 --- a/src/test/regress/input/hw_audit_detailinfo.source +++ b/src/test/regress/input/hw_audit_detailinfo.source @@ -32,12 +32,39 @@ SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:0 -- DQL \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state_select=1" > /dev/null 2>&1 +\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object=127" > /dev/null 2>&1 select pg_sleep(1); show audit_dml_state_select; create table t3(id int); select * from t3; SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:00') where type='dml_action_select' and object_name='t3'; +-- trigger test +CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT,id3 INT); +CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT); +CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS +$$ +DECLARE +BEGIN + INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, + NEW.id3); + RETURN NEW; +END +$$ LANGUAGE PLPGSQL; +CREATE TRIGGER insert_trigger + BEFORE INSERT ON test_trigger_src_tbl + FOR EACH ROW + EXECUTE PROCEDURE tri_insert_func(); +ALTER TRIGGER insert_trigger ON test_trigger_src_tbl RENAME TO +insert_trigger_renamed; +DROP TRIGGER insert_trigger_renamed ON test_trigger_src_tbl; +DROP FUNCTION tri_insert_func(); +DROP TABLE test_trigger_src_tbl; +DROP TABLE test_trigger_des_tbl; +SELECT object_name FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:00') where object_name like '%insert_trigger%'; + +\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object" > /dev/null 2>&1 + -- 关闭xid开关 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_xid_info=0" > /dev/null 2>&1 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state=0" > /dev/null 2>&1 diff --git a/src/test/regress/output/hw_audit_detailinfo.source b/src/test/regress/output/hw_audit_detailinfo.source index 514db5c58..a177dd7f5 100644 --- a/src/test/regress/output/hw_audit_detailinfo.source +++ b/src/test/regress/output/hw_audit_detailinfo.source @@ -76,6 +76,7 @@ SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:0 -- DQL \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state_select=1" > /dev/null 2>&1 +\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object=127" > /dev/null 2>&1 select pg_sleep(1); pg_sleep ---------- @@ -100,6 +101,37 @@ SELECT detail_info FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:0 xid=XIDNUM, select * from t3; (1 row) +-- trigger test +CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT,id3 INT); +CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT); +CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS +$$ +DECLARE +BEGIN + INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, + NEW.id3); + RETURN NEW; +END +$$ LANGUAGE PLPGSQL; +CREATE TRIGGER insert_trigger + BEFORE INSERT ON test_trigger_src_tbl + FOR EACH ROW + EXECUTE PROCEDURE tri_insert_func(); +ALTER TRIGGER insert_trigger ON test_trigger_src_tbl RENAME TO +insert_trigger_renamed; +DROP TRIGGER insert_trigger_renamed ON test_trigger_src_tbl; +DROP FUNCTION tri_insert_func(); +DROP TABLE test_trigger_src_tbl; +DROP TABLE test_trigger_des_tbl; +SELECT object_name FROM pg_query_audit('2021-12-17 9:30:00', '2031-12-12 22:00:00') where object_name like '%insert_trigger%'; + object_name +------------------------ + insert_trigger + insert_trigger + insert_trigger_renamed +(3 rows) + +\! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object" > /dev/null 2>&1 -- 关闭xid开关 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_xid_info=0" > /dev/null 2>&1 \! @abs_bindir@/gs_guc reload -Z datanode -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_dml_state=0" > /dev/null 2>&1