mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-11 19:20:40 +08: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;
|
||||
|
||||
/* 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],
|
||||
key->parttypmod[0],
|
||||
key->parttypcoll[0],
|
||||
key->parttyplen[0],
|
||||
*boundinfo->datums[i],
|
||||
datumCopy(*boundinfo->datums[i],
|
||||
key->parttypbyval[0],
|
||||
key->parttyplen[0]),
|
||||
false, /* isnull */
|
||||
key->parttypbyval[0]);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user