Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 59ce652

Browse files
more tests for PartitionRouter, add FIXME
1 parent a26243f commit 59ce652

File tree

4 files changed

+182
-0
lines changed

4 files changed

+182
-0
lines changed

‎Makefile‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ REGRESS = pathman_array_qual \
5555
pathman_runtime_nodes \
5656
pathman_subpartitions \
5757
pathman_update_node \
58+
pathman_update_triggers \
5859
pathman_upd_del \
5960
pathman_utility_stmt \
6061
pathman_views

‎expected/pathman_update_triggers.out‎

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
\set VERBOSITY terse
2+
SET search_path = 'public';
3+
CREATE EXTENSION pg_pathman;
4+
CREATE SCHEMA test_update_triggers;
5+
create table test_update_triggers.test (val int not null);
6+
select create_hash_partitions('test_update_triggers.test', 'val', 2,
7+
partition_names := array[
8+
'test_update_triggers.test_1',
9+
'test_update_triggers.test_2']);
10+
create_hash_partitions
11+
------------------------
12+
2
13+
(1 row)
14+
15+
create or replace function test_update_triggers.test_trigger() returns trigger as $$
16+
begin
17+
raise notice '%', format('%s %s %s (%s)', TG_WHEN, TG_OP, TG_LEVEL, TG_TABLE_NAME);
18+
19+
if TG_OP::text = 'DELETE'::text then
20+
return old;
21+
else
22+
return new;
23+
end if; end;
24+
$$ language plpgsql;
25+
create trigger bu before update ON test_update_triggers.test_1
26+
for each row execute procedure test_update_triggers.test_trigger ();
27+
create trigger bd before delete ON test_update_triggers.test_1
28+
for each row execute procedure test_update_triggers.test_trigger ();
29+
create trigger bi before insert ON test_update_triggers.test_1
30+
for each row execute procedure test_update_triggers.test_trigger ();
31+
create trigger au after update ON test_update_triggers.test_1
32+
for each row execute procedure test_update_triggers.test_trigger ();
33+
create trigger ad after delete ON test_update_triggers.test_1
34+
for each row execute procedure test_update_triggers.test_trigger ();
35+
create trigger ai after insert ON test_update_triggers.test_1
36+
for each row execute procedure test_update_triggers.test_trigger ();
37+
create trigger bu before update ON test_update_triggers.test_2
38+
for each row execute procedure test_update_triggers.test_trigger ();
39+
create trigger bd before delete ON test_update_triggers.test_2
40+
for each row execute procedure test_update_triggers.test_trigger ();
41+
create trigger bi before insert ON test_update_triggers.test_2
42+
for each row execute procedure test_update_triggers.test_trigger ();
43+
create trigger au after update ON test_update_triggers.test_2
44+
for each row execute procedure test_update_triggers.test_trigger ();
45+
create trigger ad after delete ON test_update_triggers.test_2
46+
for each row execute procedure test_update_triggers.test_trigger ();
47+
create trigger ai after insert ON test_update_triggers.test_2
48+
for each row execute procedure test_update_triggers.test_trigger ();
49+
insert into test_update_triggers.test values (1);
50+
NOTICE: BEFORE INSERT ROW (test_1)
51+
NOTICE: AFTER INSERT ROW (test_1)
52+
set pg_pathman.enable_partitionrouter = t;
53+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
54+
NOTICE: BEFORE UPDATE ROW (test_1)
55+
NOTICE: BEFORE DELETE ROW (test_1)
56+
NOTICE: BEFORE INSERT ROW (test_1)
57+
NOTICE: AFTER DELETE ROW (test_1)
58+
NOTICE: AFTER INSERT ROW (test_1)
59+
val | tableoid
60+
-----+-----------------------------
61+
2 | test_update_triggers.test_1
62+
(1 row)
63+
64+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
65+
NOTICE: BEFORE UPDATE ROW (test_1)
66+
NOTICE: BEFORE DELETE ROW (test_1)
67+
NOTICE: BEFORE INSERT ROW (test_2)
68+
NOTICE: AFTER DELETE ROW (test_1)
69+
NOTICE: AFTER INSERT ROW (test_2)
70+
val | tableoid
71+
-----+-----------------------------
72+
3 | test_update_triggers.test_2
73+
(1 row)
74+
75+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
76+
NOTICE: BEFORE UPDATE ROW (test_2)
77+
NOTICE: BEFORE DELETE ROW (test_2)
78+
NOTICE: BEFORE INSERT ROW (test_2)
79+
NOTICE: AFTER DELETE ROW (test_2)
80+
NOTICE: AFTER INSERT ROW (test_2)
81+
val | tableoid
82+
-----+-----------------------------
83+
4 | test_update_triggers.test_2
84+
(1 row)
85+
86+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
87+
NOTICE: BEFORE UPDATE ROW (test_2)
88+
NOTICE: BEFORE DELETE ROW (test_2)
89+
NOTICE: BEFORE INSERT ROW (test_1)
90+
NOTICE: AFTER DELETE ROW (test_2)
91+
NOTICE: AFTER INSERT ROW (test_1)
92+
val | tableoid
93+
-----+-----------------------------
94+
5 | test_update_triggers.test_1
95+
(1 row)
96+
97+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
98+
NOTICE: BEFORE UPDATE ROW (test_1)
99+
NOTICE: BEFORE DELETE ROW (test_1)
100+
NOTICE: BEFORE INSERT ROW (test_1)
101+
NOTICE: AFTER DELETE ROW (test_1)
102+
NOTICE: AFTER INSERT ROW (test_1)
103+
val | tableoid
104+
-----+-----------------------------
105+
6 | test_update_triggers.test_1
106+
(1 row)
107+
108+
DROP SCHEMA test_update_triggers CASCADE;
109+
NOTICE: drop cascades to 4 other objects
110+
DROP EXTENSION pg_pathman CASCADE;

‎sql/pathman_update_triggers.sql‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
\set VERBOSITY terse
2+
3+
SET search_path = 'public';
4+
CREATE EXTENSION pg_pathman;
5+
CREATE SCHEMA test_update_triggers;
6+
7+
8+
9+
create table test_update_triggers.test (val int not null);
10+
select create_hash_partitions('test_update_triggers.test', 'val', 2,
11+
partition_names := array[
12+
'test_update_triggers.test_1',
13+
'test_update_triggers.test_2']);
14+
15+
16+
create or replace function test_update_triggers.test_trigger() returns trigger as $$
17+
begin
18+
raise notice '%', format('%s %s %s (%s)', TG_WHEN, TG_OP, TG_LEVEL, TG_TABLE_NAME);
19+
20+
if TG_OP::text = 'DELETE'::text then
21+
return old;
22+
else
23+
return new;
24+
end if; end;
25+
$$ language plpgsql;
26+
27+
28+
create trigger bu before update ON test_update_triggers.test_1
29+
for each row execute procedure test_update_triggers.test_trigger ();
30+
create trigger bd before delete ON test_update_triggers.test_1
31+
for each row execute procedure test_update_triggers.test_trigger ();
32+
create trigger bi before insert ON test_update_triggers.test_1
33+
for each row execute procedure test_update_triggers.test_trigger ();
34+
35+
create trigger au after update ON test_update_triggers.test_1
36+
for each row execute procedure test_update_triggers.test_trigger ();
37+
create trigger ad after delete ON test_update_triggers.test_1
38+
for each row execute procedure test_update_triggers.test_trigger ();
39+
create trigger ai after insert ON test_update_triggers.test_1
40+
for each row execute procedure test_update_triggers.test_trigger ();
41+
42+
43+
create trigger bu before update ON test_update_triggers.test_2
44+
for each row execute procedure test_update_triggers.test_trigger ();
45+
create trigger bd before delete ON test_update_triggers.test_2
46+
for each row execute procedure test_update_triggers.test_trigger ();
47+
create trigger bi before insert ON test_update_triggers.test_2
48+
for each row execute procedure test_update_triggers.test_trigger ();
49+
50+
create trigger au after update ON test_update_triggers.test_2
51+
for each row execute procedure test_update_triggers.test_trigger ();
52+
create trigger ad after delete ON test_update_triggers.test_2
53+
for each row execute procedure test_update_triggers.test_trigger ();
54+
create trigger ai after insert ON test_update_triggers.test_2
55+
for each row execute procedure test_update_triggers.test_trigger ();
56+
57+
58+
insert into test_update_triggers.test values (1);
59+
60+
set pg_pathman.enable_partitionrouter = t;
61+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
62+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
63+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
64+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
65+
update test_update_triggers.test set val = val + 1 returning *, tableoid::regclass;
66+
67+
68+
69+
DROP SCHEMA test_update_triggers CASCADE;
70+
DROP EXTENSION pg_pathman CASCADE;

‎src/hooks.c‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,6 +978,7 @@ pathman_executor_hook(QueryDesc *queryDesc,
978978

979979
PlanState *state = (PlanState *) queryDesc->planstate;
980980

981+
/* FIXME: we should modify ALL ModifyTable nodes! They might be hidden deeper. */
981982
if (IsA(state, ModifyTableState))
982983
{
983984
ModifyTableState *mt_state = (ModifyTableState *) state;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /