mirror of
https://github.com/postgres/postgres.git
synced 2025-06-06 00:02:36 -04:00
Fix heap_multi_insert to set t_self field in the caller's tuples.
If tuples were toasted, heap_multi_insert didn't update the ctid on the original tuples. This caused a failure if there was an after trigger (including a foreign key), on the table, and a tuple got toasted. Per off-list report and test case from Ted Phelps
This commit is contained in:
parent
b4e3633ac4
commit
21b1634275
@ -2291,6 +2291,14 @@ heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples,
|
|||||||
CacheInvalidateHeapTuple(relation, heaptuples[i], NULL);
|
CacheInvalidateHeapTuple(relation, heaptuples[i], NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy t_self fields back to the caller's original tuples. This does
|
||||||
|
* nothing for untoasted tuples (tuples[i] == heaptuples[i)], but it's
|
||||||
|
* probably faster to always copy than check.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < ntuples; i++)
|
||||||
|
tuples[i]->t_self = heaptuples[i]->t_self;
|
||||||
|
|
||||||
pgstat_count_heap_insert(relation, ntuples);
|
pgstat_count_heap_insert(relation, ntuples);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user