Fix COPY's handling of transition tables with indexes.
Commit c46c0e5202e8cfe750c6629db7852fdb15d528f3 failed to pass the TransitionCaptureState object to ExecARInsertTriggers() in the case where it's using heap_multi_insert and there are indexes. Repair. Thomas Munro, from a report by David Fetter Discussion: https://postgr.es/m/20170708084213.GA14720%40fetter.org
This commit is contained in:
parent
7b02ba62e9
commit
1add0b15f1
@ -2915,7 +2915,7 @@ CopyFromInsertBatch(CopyState cstate, EState *estate, CommandId mycid,
|
|||||||
estate, false, NULL, NIL);
|
estate, false, NULL, NIL);
|
||||||
ExecARInsertTriggers(estate, resultRelInfo,
|
ExecARInsertTriggers(estate, resultRelInfo,
|
||||||
bufferedTuples[i],
|
bufferedTuples[i],
|
||||||
recheckIndexes, NULL);
|
recheckIndexes, cstate->transition_capture);
|
||||||
list_free(recheckIndexes);
|
list_free(recheckIndexes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2156,6 +2156,11 @@ NOTICE: trigger = child3_delete_trig, old table = (CCC,42,foo)
|
|||||||
-- are really inserted into the parent)
|
-- are really inserted into the parent)
|
||||||
copy parent (a, b) from stdin;
|
copy parent (a, b) from stdin;
|
||||||
NOTICE: trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42)
|
NOTICE: trigger = parent_insert_trig, new table = (AAA,42), (BBB,42), (CCC,42)
|
||||||
|
-- same behavior for copy if there is an index (interesting because rows are
|
||||||
|
-- captured by a different code path in copy.c if there are indexes)
|
||||||
|
create index on parent(b);
|
||||||
|
copy parent (a, b) from stdin;
|
||||||
|
NOTICE: trigger = parent_insert_trig, new table = (DDD,42)
|
||||||
-- DML affecting parent sees tuples collected from children even if
|
-- DML affecting parent sees tuples collected from children even if
|
||||||
-- there is no transition table trigger on the children
|
-- there is no transition table trigger on the children
|
||||||
drop trigger child1_insert_trig on child1;
|
drop trigger child1_insert_trig on child1;
|
||||||
@ -2168,7 +2173,7 @@ drop trigger child3_insert_trig on child3;
|
|||||||
drop trigger child3_update_trig on child3;
|
drop trigger child3_update_trig on child3;
|
||||||
drop trigger child3_delete_trig on child3;
|
drop trigger child3_delete_trig on child3;
|
||||||
delete from parent;
|
delete from parent;
|
||||||
NOTICE: trigger = parent_delete_trig, old table = (AAA,42), (BBB,42), (CCC,42)
|
NOTICE: trigger = parent_delete_trig, old table = (AAA,42), (BBB,42), (CCC,42), (DDD,42)
|
||||||
drop table child1, child2, child3, parent;
|
drop table child1, child2, child3, parent;
|
||||||
--
|
--
|
||||||
-- Verify prohibition of row triggers with transition triggers on
|
-- Verify prohibition of row triggers with transition triggers on
|
||||||
|
@ -1661,6 +1661,13 @@ BBB 42
|
|||||||
CCC 42
|
CCC 42
|
||||||
\.
|
\.
|
||||||
|
|
||||||
|
-- same behavior for copy if there is an index (interesting because rows are
|
||||||
|
-- captured by a different code path in copy.c if there are indexes)
|
||||||
|
create index on parent(b);
|
||||||
|
copy parent (a, b) from stdin;
|
||||||
|
DDD 42
|
||||||
|
\.
|
||||||
|
|
||||||
-- DML affecting parent sees tuples collected from children even if
|
-- DML affecting parent sees tuples collected from children even if
|
||||||
-- there is no transition table trigger on the children
|
-- there is no transition table trigger on the children
|
||||||
drop trigger child1_insert_trig on child1;
|
drop trigger child1_insert_trig on child1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user