diff --git a/src/gausskernel/optimizer/commands/trigger.cpp b/src/gausskernel/optimizer/commands/trigger.cpp index 2b7f2572b..370783d5f 100644 --- a/src/gausskernel/optimizer/commands/trigger.cpp +++ b/src/gausskernel/optimizer/commands/trigger.cpp @@ -3182,7 +3182,7 @@ ltrmark: lockmode, LockWaitBlock, &tmfd, - false, // fake params below are for uheap implementation + true, // fake params below are for uheap implementation false, false, NULL, NULL, false); switch (test) { case TM_SelfUpdated: diff --git a/src/gausskernel/runtime/executor/nodeModifyTable.cpp b/src/gausskernel/runtime/executor/nodeModifyTable.cpp index c9c542598..804404387 100644 --- a/src/gausskernel/runtime/executor/nodeModifyTable.cpp +++ b/src/gausskernel/runtime/executor/nodeModifyTable.cpp @@ -1766,7 +1766,8 @@ ldelete: estate->es_snapshot, true /* wait for commit */, &oldslot, - &tmfd); + &tmfd, + node->isReplace); switch (result) { case TM_SelfUpdated: diff --git a/src/test/regress/expected/replaceinto.out b/src/test/regress/expected/replaceinto.out index 6af744d8f..1c0fdc1d4 100644 --- a/src/test/regress/expected/replaceinto.out +++ b/src/test/regress/expected/replaceinto.out @@ -93,6 +93,29 @@ select * from replace_test; 1 | aaaaa | ddddd (4 rows) +replace into replace_test values(3,'ccccc','ccccc'),(3,'ddddd','ccccc'),(3,'eeeee','eeeee'); +NOTICE: before delete trigger +NOTICE: before insert trigger +NOTICE: before delete trigger +NOTICE: before insert trigger +NOTICE: before delete trigger +NOTICE: before delete trigger +NOTICE: before insert trigger +NOTICE: after delete trigger +NOTICE: after insert trigger +NOTICE: after delete trigger +NOTICE: after insert trigger +NOTICE: after delete trigger +NOTICE: after delete trigger +NOTICE: after insert trigger +select * from replace_test; + id | name | key +----+-------+------- + 2 | bbbbb | bbbbb + 1 | aaaaa | ddddd + 3 | eeeee | eeeee +(3 rows) + explain analyze REPLACE INTO replace_test values(2,'aaaa','bbbb'); NOTICE: before delete trigger NOTICE: before insert trigger diff --git a/src/test/regress/sql/replaceinto.sql b/src/test/regress/sql/replaceinto.sql index 80e6515cb..b279c84db 100644 --- a/src/test/regress/sql/replaceinto.sql +++ b/src/test/regress/sql/replaceinto.sql @@ -49,6 +49,8 @@ replace into replace_test values(3,'ccccc','ccccc'),(4,'ddddd','ddddd'),(5,'eeee select * from replace_test; replace into replace_test values(1,'aaaaa','ddddd'); select * from replace_test; +replace into replace_test values(3,'ccccc','ccccc'),(3,'ddddd','ccccc'),(3,'eeeee','eeeee'); +select * from replace_test; explain analyze REPLACE INTO replace_test values(2,'aaaa','bbbb'); explain performance REPLACE INTO replace_test values(2,'ddddd','fffff'); truncate replace_test;