From f694df09076891a51d68629e5eda53c7eadcfc73 Mon Sep 17 00:00:00 2001 From: shihao zhong Date: Mon, 9 Nov 2026 17:42:59 -0500 Subject: [PATCH 2/3] Test stored generated columns in transition tables of partitioned tables Cover the routing paths that convert tuples. Backpatch-through: 14 --- src/test/regress/expected/triggers.out | 16 ++++++++++++++++ src/test/regress/sql/triggers.sql | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/test/regress/expected/triggers.out b/src/test/regress/expected/triggers.out index 03d9562ec90..b238136ec92 100644 --- a/src/test/regress/expected/triggers.out +++ b/src/test/regress/expected/triggers.out @@ -3407,6 +3407,22 @@ select * from merge_conv_table order by a; (2 rows) drop table merge_conv_table; +-- Stored generated columns in the transition table, with tuple conversion +create table gen_conv_table (a int, b int, g int generated always as (b * 2) stored) + partition by list (a); +create table gen_conv_table_p1 (b int, g int generated always as (b * 2) stored, a int); +alter table gen_conv_table attach partition gen_conv_table_p1 default; +create trigger gen_conv_table_trig + after insert on gen_conv_table referencing new table as new_table + for each statement execute procedure dump_insert(); +insert into gen_conv_table (a, b) values (1, 10); +NOTICE: trigger = gen_conv_table_trig, new table = (1,10,20) +copy gen_conv_table (a, b) from stdin; +NOTICE: trigger = gen_conv_table_trig, new table = (2,20,40) +merge into gen_conv_table using (values (3)) as s(a) on false + when not matched then insert (a, b) values (3, 30); +NOTICE: trigger = gen_conv_table_trig, new table = (3,30,60) +drop table gen_conv_table; -- cleanup drop function dump_insert(); drop function dump_update(); diff --git a/src/test/regress/sql/triggers.sql b/src/test/regress/sql/triggers.sql index 71458ec2d66..67a89d0f7eb 100644 --- a/src/test/regress/sql/triggers.sql +++ b/src/test/regress/sql/triggers.sql @@ -2568,6 +2568,22 @@ select * from merge_conv_table order by a; drop table merge_conv_table; +-- Stored generated columns in the transition table, with tuple conversion +create table gen_conv_table (a int, b int, g int generated always as (b * 2) stored) + partition by list (a); +create table gen_conv_table_p1 (b int, g int generated always as (b * 2) stored, a int); +alter table gen_conv_table attach partition gen_conv_table_p1 default; +create trigger gen_conv_table_trig + after insert on gen_conv_table referencing new table as new_table + for each statement execute procedure dump_insert(); +insert into gen_conv_table (a, b) values (1, 10); +copy gen_conv_table (a, b) from stdin; +2 20 +\. +merge into gen_conv_table using (values (3)) as s(a) on false + when not matched then insert (a, b) values (3, 30); +drop table gen_conv_table; + -- cleanup drop function dump_insert(); drop function dump_update(); -- 2.37.1 (Apple Git-137.1)