2222return new;
2323end if; end;
2424$$ language plpgsql;
25+ /* Enable our precious custom node */
26+ set pg_pathman.enable_partitionrouter = t;
27+ /*
28+ * Statement level triggers
29+ */
30+ create trigger bus before update ON test_update_triggers.test
31+ execute procedure test_update_triggers.test_trigger ();
32+ create trigger bds before delete ON test_update_triggers.test
33+ execute procedure test_update_triggers.test_trigger ();
34+ create trigger bis before insert ON test_update_triggers.test
35+ execute procedure test_update_triggers.test_trigger ();
36+ create trigger aus after update ON test_update_triggers.test
37+ execute procedure test_update_triggers.test_trigger ();
38+ create trigger ads after delete ON test_update_triggers.test
39+ execute procedure test_update_triggers.test_trigger ();
40+ create trigger ais after insert ON test_update_triggers.test
41+ execute procedure test_update_triggers.test_trigger ();
42+ create trigger bus before update ON test_update_triggers.test_1
43+ execute procedure test_update_triggers.test_trigger ();
44+ create trigger bds before delete ON test_update_triggers.test_1
45+ execute procedure test_update_triggers.test_trigger ();
46+ create trigger bis before insert ON test_update_triggers.test_1
47+ execute procedure test_update_triggers.test_trigger ();
48+ create trigger aus after update ON test_update_triggers.test_1
49+ execute procedure test_update_triggers.test_trigger ();
50+ create trigger ads after delete ON test_update_triggers.test_1
51+ execute procedure test_update_triggers.test_trigger ();
52+ create trigger ais after insert ON test_update_triggers.test_1
53+ execute procedure test_update_triggers.test_trigger ();
54+ create trigger bus before update ON test_update_triggers.test_2
55+ execute procedure test_update_triggers.test_trigger ();
56+ create trigger bds before delete ON test_update_triggers.test_2
57+ execute procedure test_update_triggers.test_trigger ();
58+ create trigger bis before insert ON test_update_triggers.test_2
59+ execute procedure test_update_triggers.test_trigger ();
60+ create trigger aus after update ON test_update_triggers.test_2
61+ execute procedure test_update_triggers.test_trigger ();
62+ create trigger ads after delete ON test_update_triggers.test_2
63+ execute procedure test_update_triggers.test_trigger ();
64+ create trigger ais after insert ON test_update_triggers.test_2
65+ execute procedure test_update_triggers.test_trigger ();
66+ /* multiple values */
67+ insert into test_update_triggers.test select generate_series(1, 200);
68+ NOTICE: BEFORE INSERT STATEMENT (test)
69+ NOTICE: AFTER INSERT STATEMENT (test)
70+ update test_update_triggers.test set val = val + 1;
71+ NOTICE: BEFORE UPDATE STATEMENT (test)
72+ NOTICE: AFTER UPDATE STATEMENT (test)
73+ update test_update_triggers.test set val = val + 1;
74+ NOTICE: BEFORE UPDATE STATEMENT (test)
75+ NOTICE: AFTER UPDATE STATEMENT (test)
76+ update test_update_triggers.test set val = val + 1;
77+ NOTICE: BEFORE UPDATE STATEMENT (test)
78+ NOTICE: AFTER UPDATE STATEMENT (test)
79+ update test_update_triggers.test set val = val + 1;
80+ NOTICE: BEFORE UPDATE STATEMENT (test)
81+ NOTICE: AFTER UPDATE STATEMENT (test)
82+ update test_update_triggers.test set val = val + 1;
83+ NOTICE: BEFORE UPDATE STATEMENT (test)
84+ NOTICE: AFTER UPDATE STATEMENT (test)
85+ select count(distinct val) from test_update_triggers.test;
86+ count
87+ -------
88+ 200
89+ (1 row)
90+
91+ truncate test_update_triggers.test;
92+ /*
93+ * Row level triggers
94+ */
2595create trigger bu before update ON test_update_triggers.test_1
2696for each row execute procedure test_update_triggers.test_trigger ();
2797create trigger bd before delete ON test_update_triggers.test_1
@@ -46,56 +116,74 @@ create trigger ad after delete ON test_update_triggers.test_2
46116for each row execute procedure test_update_triggers.test_trigger ();
47117create trigger ai after insert ON test_update_triggers.test_2
48118for each row execute procedure test_update_triggers.test_trigger ();
119+ /* single value */
49120insert into test_update_triggers.test values (1);
121+ NOTICE: BEFORE INSERT STATEMENT (test)
50122NOTICE: BEFORE INSERT ROW (test_1)
51123NOTICE: AFTER INSERT ROW (test_1)
52- set pg_pathman.enable_partitionrouter = t;
124+ NOTICE: AFTER INSERT STATEMENT (test)
53125update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
126+ NOTICE: BEFORE UPDATE STATEMENT (test)
54127NOTICE: BEFORE UPDATE ROW (test_1)
55128NOTICE: AFTER UPDATE ROW (test_1)
129+ NOTICE: AFTER UPDATE STATEMENT (test)
56130 val | tableoid
57131-----+-----------------------------
58132 2 | test_update_triggers.test_1
59133(1 row)
60134
61135update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
136+ NOTICE: BEFORE UPDATE STATEMENT (test)
62137NOTICE: BEFORE UPDATE ROW (test_1)
63138NOTICE: BEFORE DELETE ROW (test_1)
64139NOTICE: BEFORE INSERT ROW (test_2)
65140NOTICE: AFTER DELETE ROW (test_1)
66141NOTICE: AFTER INSERT ROW (test_2)
142+ NOTICE: AFTER UPDATE STATEMENT (test)
67143 val | tableoid
68144-----+-----------------------------
69145 3 | test_update_triggers.test_2
70146(1 row)
71147
72148update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
149+ NOTICE: BEFORE UPDATE STATEMENT (test)
73150NOTICE: BEFORE UPDATE ROW (test_2)
74151NOTICE: AFTER UPDATE ROW (test_2)
152+ NOTICE: AFTER UPDATE STATEMENT (test)
75153 val | tableoid
76154-----+-----------------------------
77155 4 | test_update_triggers.test_2
78156(1 row)
79157
80158update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
159+ NOTICE: BEFORE UPDATE STATEMENT (test)
81160NOTICE: BEFORE UPDATE ROW (test_2)
82161NOTICE: BEFORE DELETE ROW (test_2)
83162NOTICE: BEFORE INSERT ROW (test_1)
84163NOTICE: AFTER DELETE ROW (test_2)
85164NOTICE: AFTER INSERT ROW (test_1)
165+ NOTICE: AFTER UPDATE STATEMENT (test)
86166 val | tableoid
87167-----+-----------------------------
88168 5 | test_update_triggers.test_1
89169(1 row)
90170
91171update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
172+ NOTICE: BEFORE UPDATE STATEMENT (test)
92173NOTICE: BEFORE UPDATE ROW (test_1)
93174NOTICE: AFTER UPDATE ROW (test_1)
175+ NOTICE: AFTER UPDATE STATEMENT (test)
94176 val | tableoid
95177-----+-----------------------------
96178 6 | test_update_triggers.test_1
97179(1 row)
98180
181+ select count(distinct val) from test_update_triggers.test;
182+ count
183+ -------
184+ 1
185+ (1 row)
186+
99187DROP SCHEMA test_update_triggers CASCADE;
100188NOTICE: drop cascades to 4 other objects
101189DROP EXTENSION pg_pathman CASCADE;