Movatterモバイル変換


[0]ホーム

URL:


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

Commit59ce652

Browse files
committed
more tests for PartitionRouter, add FIXME
1 parenta26243f commit59ce652

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
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+
CREATESCHEMAtest_update_triggers;
6+
7+
8+
9+
createtabletest_update_triggers.test (valintnot 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 replacefunctiontest_update_triggers.test_trigger() returns triggeras $$
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+
createtriggerbu beforeupdateONtest_update_triggers.test_1
29+
for each row execute proceduretest_update_triggers.test_trigger ();
30+
createtriggerbd beforedeleteONtest_update_triggers.test_1
31+
for each row execute proceduretest_update_triggers.test_trigger ();
32+
createtriggerbi before insertONtest_update_triggers.test_1
33+
for each row execute proceduretest_update_triggers.test_trigger ();
34+
35+
createtriggerau afterupdateONtest_update_triggers.test_1
36+
for each row execute proceduretest_update_triggers.test_trigger ();
37+
createtriggerad afterdeleteONtest_update_triggers.test_1
38+
for each row execute proceduretest_update_triggers.test_trigger ();
39+
createtriggerai after insertONtest_update_triggers.test_1
40+
for each row execute proceduretest_update_triggers.test_trigger ();
41+
42+
43+
createtriggerbu beforeupdateONtest_update_triggers.test_2
44+
for each row execute proceduretest_update_triggers.test_trigger ();
45+
createtriggerbd beforedeleteONtest_update_triggers.test_2
46+
for each row execute proceduretest_update_triggers.test_trigger ();
47+
createtriggerbi before insertONtest_update_triggers.test_2
48+
for each row execute proceduretest_update_triggers.test_trigger ();
49+
50+
createtriggerau afterupdateONtest_update_triggers.test_2
51+
for each row execute proceduretest_update_triggers.test_trigger ();
52+
createtriggerad afterdeleteONtest_update_triggers.test_2
53+
for each row execute proceduretest_update_triggers.test_trigger ();
54+
createtriggerai after insertONtest_update_triggers.test_2
55+
for each row execute proceduretest_update_triggers.test_trigger ();
56+
57+
58+
insert intotest_update_triggers.testvalues (1);
59+
60+
setpg_pathman.enable_partitionrouter= t;
61+
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
62+
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
63+
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
64+
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
65+
updatetest_update_triggers.testset val= val+1 returning*, tableoid::regclass;
66+
67+
68+
69+
DROPSCHEMA 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)

[8]ページ先頭

©2009-2025 Movatter.jp