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

Commitf81a91d

Browse files
committed
Use a real RT index when setting up partition tuple routing.
Before, we always used a dummy value of 1, but that's not right whenthe partitioned table being modified is inside of a WITH clauserather than part of the main query.Amit Langote, reported and reviewd by Etsuro Fujita, with a commentchange by me.Discussion:http://postgr.es/m/ee12f648-8907-77b5-afc0-2980bcb0aa37@lab.ntt.co.jp
1 parent5334633 commitf81a91d

File tree

6 files changed

+41
-1
lines changed

6 files changed

+41
-1
lines changed

‎src/backend/commands/copy.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,6 +1433,7 @@ BeginCopy(ParseState *pstate,
14331433
num_partitions;
14341434

14351435
ExecSetupPartitionTupleRouting(rel,
1436+
1,
14361437
&partition_dispatch_info,
14371438
&partitions,
14381439
&partition_tupconv_maps,

‎src/backend/executor/execMain.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3213,6 +3213,7 @@ EvalPlanQualEnd(EPQState *epqstate)
32133213
*/
32143214
void
32153215
ExecSetupPartitionTupleRouting(Relationrel,
3216+
IndexresultRTindex,
32163217
PartitionDispatch**pd,
32173218
ResultRelInfo**partitions,
32183219
TupleConversionMap***tup_conv_maps,
@@ -3271,7 +3272,7 @@ ExecSetupPartitionTupleRouting(Relation rel,
32713272

32723273
InitResultRelInfo(leaf_part_rri,
32733274
partrel,
3274-
1,/* dummy */
3275+
resultRTindex,
32753276
rel,
32763277
0);
32773278

‎src/backend/executor/nodeModifyTable.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1914,6 +1914,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
19141914
num_partitions;
19151915

19161916
ExecSetupPartitionTupleRouting(rel,
1917+
node->nominalRelation,
19171918
&partition_dispatch_info,
19181919
&partitions,
19191920
&partition_tupconv_maps,

‎src/include/executor/executor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ extern void EvalPlanQualSetTuple(EPQState *epqstate, Index rti,
207207
HeapTupletuple);
208208
externHeapTupleEvalPlanQualGetTuple(EPQState*epqstate,Indexrti);
209209
externvoidExecSetupPartitionTupleRouting(Relationrel,
210+
IndexresultRTindex,
210211
PartitionDispatch**pd,
211212
ResultRelInfo**partitions,
212213
TupleConversionMap***tup_conv_maps,

‎src/test/regress/expected/insert.out

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,5 +506,23 @@ DETAIL: Failing row contains (2, hi there).
506506
insert into brtrigpartcon1 values (1, 'hi there');
507507
ERROR: new row for relation "brtrigpartcon1" violates partition constraint
508508
DETAIL: Failing row contains (2, hi there).
509+
-- check that the message shows the appropriate column description in a
510+
-- situation where the partitioned table is not the primary ModifyTable node
511+
create table inserttest3 (f1 text default 'foo', f2 text default 'bar', f3 int);
512+
create role regress_coldesc_role;
513+
grant insert on inserttest3 to regress_coldesc_role;
514+
grant insert on brtrigpartcon to regress_coldesc_role;
515+
revoke select on brtrigpartcon from regress_coldesc_role;
516+
set role regress_coldesc_role;
517+
with result as (insert into brtrigpartcon values (1, 'hi there') returning 1)
518+
insert into inserttest3 (f3) select * from result;
519+
ERROR: new row for relation "brtrigpartcon1" violates partition constraint
520+
DETAIL: Failing row contains (a, b) = (2, hi there).
521+
reset role;
522+
-- cleanup
523+
revoke all on inserttest3 from regress_coldesc_role;
524+
revoke all on brtrigpartcon from regress_coldesc_role;
525+
drop role regress_coldesc_role;
526+
drop table inserttest3;
509527
drop table brtrigpartcon;
510528
drop function brtrigpartcon1trigf();

‎src/test/regress/sql/insert.sql

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,5 +340,23 @@ create or replace function brtrigpartcon1trigf() returns trigger as $$begin new.
340340
createtriggerbrtrigpartcon1trig before inserton brtrigpartcon1 for each row execute procedure brtrigpartcon1trigf();
341341
insert into brtrigpartconvalues (1,'hi there');
342342
insert into brtrigpartcon1values (1,'hi there');
343+
344+
-- check that the message shows the appropriate column description in a
345+
-- situation where the partitioned table is not the primary ModifyTable node
346+
createtableinserttest3 (f1text default'foo', f2text default'bar', f3int);
347+
create role regress_coldesc_role;
348+
grant inserton inserttest3 to regress_coldesc_role;
349+
grant inserton brtrigpartcon to regress_coldesc_role;
350+
revokeselecton brtrigpartconfrom regress_coldesc_role;
351+
set role regress_coldesc_role;
352+
with resultas (insert into brtrigpartconvalues (1,'hi there') returning1)
353+
insert into inserttest3 (f3)select*from result;
354+
reset role;
355+
356+
-- cleanup
357+
revoke allon inserttest3from regress_coldesc_role;
358+
revoke allon brtrigpartconfrom regress_coldesc_role;
359+
drop role regress_coldesc_role;
360+
droptable inserttest3;
343361
droptable brtrigpartcon;
344362
dropfunction brtrigpartcon1trigf();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp