Add a test for transition table usage in FOR EACH ROW trigger.

This commit is contained in:
Kevin Grittner 2017-05-16 16:09:55 -05:00
parent 8b0b6303e9
commit 4a03f935b3
3 changed files with 53 additions and 0 deletions

View File

@ -191,6 +191,7 @@ timestamp_tbl|f
timestamptz_tbl|f
timetz_tbl|f
tinterval_tbl|f
transition_table_for_rows|f
varchar_tbl|f
-- restore normal output mode
\a\t

View File

@ -1893,3 +1893,30 @@ copy parted_stmt_trig1(a) from stdin;
NOTICE: trigger on parted_stmt_trig1 BEFORE INSERT for ROW
NOTICE: trigger on parted_stmt_trig1 AFTER INSERT for ROW
drop table parted_stmt_trig, parted2_stmt_trig;
--
-- Verify that transition table in FOR EACH ROW trigge shows all rows affected
-- by the statement (through the end) for each row (from the beginning).
--
create table transition_table_for_rows (c int not null);
create function transition_table_for_rows_func()
returns trigger
language plpgsql
as $$
begin
raise notice '% / % = %',
new.c,
(select sum(c) from newtable),
(select new.c::float / sum(newtable.c) from newtable);
return null;
end;
$$;
create trigger transition_table_for_rows_trig
after insert or update on transition_table_for_rows
referencing new table as newtable
for each row
execute procedure transition_table_for_rows_func();
insert into transition_table_for_rows select generate_series(1,4);
NOTICE: 1 / 10 = 0.1
NOTICE: 2 / 10 = 0.2
NOTICE: 3 / 10 = 0.3
NOTICE: 4 / 10 = 0.4

View File

@ -1360,3 +1360,28 @@ copy parted_stmt_trig1(a) from stdin;
\.
drop table parted_stmt_trig, parted2_stmt_trig;
--
-- Verify that transition table in FOR EACH ROW trigger shows all rows
-- affected by the statement (through the end) for each row (from the
-- beginning).
--
create table transition_table_for_rows (c int not null);
create function transition_table_for_rows_func()
returns trigger
language plpgsql
as $$
begin
raise notice '% / % = %',
new.c,
(select sum(c) from newtable),
(select new.c::float / sum(newtable.c) from newtable);
return null;
end;
$$;
create trigger transition_table_for_rows_trig
after insert or update on transition_table_for_rows
referencing new table as newtable
for each row
execute procedure transition_table_for_rows_func();
insert into transition_table_for_rows select generate_series(1,4);