mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
Fix failure-to-copy bug in commit 6f6b99d13.
The previous coding of get_qual_for_list() was careful to copy everything it was using from the input data structure. The new version missed making a copy of pass-by-ref datum values that it's inserting into Consts. This is not optional, however, as revealed by buildfarm failures on machines running -DRELCACHE_FORCE_RELEASE: we're copying from a relcache entry that could go away before the required lifespan of our output expression. I'm pretty sure -DCLOBBER_CACHE_ALWAYS machines won't like this either, but none of them have reported in yet.
This commit is contained in:
parent
e56dd7cf50
commit
fdf87ed451
@ -1559,12 +1559,18 @@ get_qual_for_list(Relation parent, PartitionBoundSpec *spec)
|
|||||||
{
|
{
|
||||||
Const *val;
|
Const *val;
|
||||||
|
|
||||||
/* Construct const from datum */
|
/*
|
||||||
|
* Construct Const from known-not-null datum. We must be careful
|
||||||
|
* to copy the value, because our result has to be able to outlive
|
||||||
|
* the relcache entry we're copying from.
|
||||||
|
*/
|
||||||
val = makeConst(key->parttypid[0],
|
val = makeConst(key->parttypid[0],
|
||||||
key->parttypmod[0],
|
key->parttypmod[0],
|
||||||
key->parttypcoll[0],
|
key->parttypcoll[0],
|
||||||
key->parttyplen[0],
|
key->parttyplen[0],
|
||||||
*boundinfo->datums[i],
|
datumCopy(*boundinfo->datums[i],
|
||||||
|
key->parttypbyval[0],
|
||||||
|
key->parttyplen[0]),
|
||||||
false, /* isnull */
|
false, /* isnull */
|
||||||
key->parttypbyval[0]);
|
key->parttypbyval[0]);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user