From 9ddf46365439ca165c373b6e6233116d16e71b50 Mon Sep 17 00:00:00 2001 From: TinyBag Date: Wed, 26 Mar 2025 20:33:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dmlog=E6=B8=85=E7=90=86?= =?UTF-8?q?=E4=B8=8D=E5=8F=8A=E6=97=B6=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../optimizer/commands/matview.cpp | 4 +- src/test/regress/expected/matview_single.out | 39 +++++++++++++++++++ src/test/regress/sql/matview_single.sql | 32 +++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/gausskernel/optimizer/commands/matview.cpp b/src/gausskernel/optimizer/commands/matview.cpp index 6439a08fc1..b5e91db3ae 100755 --- a/src/gausskernel/optimizer/commands/matview.cpp +++ b/src/gausskernel/optimizer/commands/matview.cpp @@ -3078,8 +3078,8 @@ static void MlogClearLogByTime(Oid mlogID, Timestamp ts) ScanKeyInit(&entry[0], MlogAttributeTime, - BTLessStrategyNumber, - F_TIMESTAMP_LT, + BTLessEqualStrategyNumber, + F_TIMESTAMP_LE, TimestampGetDatum(ts)); Relation rel = heap_open(mlogID, RowExclusiveLock); //TODO: high lock diff --git a/src/test/regress/expected/matview_single.out b/src/test/regress/expected/matview_single.out index aa77c92fbd..988b9d8b90 100644 --- a/src/test/regress/expected/matview_single.out +++ b/src/test/regress/expected/matview_single.out @@ -463,3 +463,42 @@ select * from imv_ind_v; drop table imv_ind_t cascade; NOTICE: drop cascades to materialized view imv_ind_v +-- clear mlog +create table clear_t(c1 int); +create incremental materialized view clear_v as select * from clear_t; +insert into clear_t values(1); +create table clear_mlog_record(c1 int); +declare + oid int := (select oid from pg_class where relname = 'clear_t'); + table_name varchar(20) := 'mlog_' || oid; + stmt text := 'insert into clear_mlog_record select count(*) from ' || table_name; +begin + execute stmt; + commit; +END; +/ +select * from clear_mlog_record; + c1 +---- + 1 +(1 row) + +truncate table clear_mlog_record; +refresh incremental materialized view clear_v; +declare + oid int := (select oid from pg_class where relname = 'clear_t'); + table_name varchar(20) := 'mlog_' || oid; + stmt text := 'insert into clear_mlog_record select count(*) from ' || table_name; +begin + execute stmt; + commit; +END; +/ +select * from clear_mlog_record; + c1 +---- + 0 +(1 row) + +drop materialized view clear_v; +drop table clear_t, clear_mlog_record; diff --git a/src/test/regress/sql/matview_single.sql b/src/test/regress/sql/matview_single.sql index 2f3578f0e1..a5f7eb8f03 100644 --- a/src/test/regress/sql/matview_single.sql +++ b/src/test/regress/sql/matview_single.sql @@ -270,3 +270,35 @@ copy imv_ind_t from stdin; refresh incremental materialized view imv_ind_v; select * from imv_ind_v; drop table imv_ind_t cascade; + +-- clear mlog +create table clear_t(c1 int); +create incremental materialized view clear_v as select * from clear_t; +insert into clear_t values(1); +create table clear_mlog_record(c1 int); +declare + oid int := (select oid from pg_class where relname = 'clear_t'); + table_name varchar(20) := 'mlog_' || oid; + stmt text := 'insert into clear_mlog_record select count(*) from ' || table_name; +begin + execute stmt; + commit; +END; +/ +select * from clear_mlog_record; +truncate table clear_mlog_record; + +refresh incremental materialized view clear_v; + +declare + oid int := (select oid from pg_class where relname = 'clear_t'); + table_name varchar(20) := 'mlog_' || oid; + stmt text := 'insert into clear_mlog_record select count(*) from ' || table_name; +begin + execute stmt; + commit; +END; +/ +select * from clear_mlog_record; +drop materialized view clear_v; +drop table clear_t, clear_mlog_record; -- Gitee