Add a test for transition table usage in FOR EACH ROW trigger.
authorKevin Grittner <kgrittn@postgresql.org>
Tue, 16 May 2017 21:09:55 +0000 (16:09 -0500)
committerKevin Grittner <kgrittn@postgresql.org>
Tue, 16 May 2017 21:09:55 +0000 (16:09 -0500)
src/test/regress/expected/sanity_check.out
src/test/regress/expected/triggers.out
src/test/regress/sql/triggers.sql

index 6750152e0f4908bcddc8bbe7cbc997ed77606722..6d20f3ec0c579e023a273f9c411e26e30c271e49 100644 (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
index 0d560fb3eed3519f09fbe77d00b20faabefa9c2d..8a908f27b35e18321f176fb28b950fd0079ebcac 100644 (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
index 5581fcb16485ac7ccee7fd79a936e5695841b15e..7231b771a4731304bdad1ab901032b4a694d88ea 100644 (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);