On 2016/07/04 21:31, Ashutosh Bapat wrote: > Hi Amit, > I observed that the ChangeVarNodes call at line 1229 in > get_relation_constraints() (code below) changes the varno in the cached > copy of partition key expression, which is undesirable. The reason for this > seems to be that the RelationGetPartitionCheckQual() returns the copy of > partition key expression directly from the cache. This is mostly because > get_check_qual_for_range() directly works on cached copy of partition key > expressions, which it should never.
Yes, a copyObject() on key->partexprs items seems necessary. Will fix that. > 1223 /* Append partition check quals, if any */ > 1224 pcqual = RelationGetPartitionCheckQual(relation); > 1225 if (pcqual) > 1226 { > 1227 /* Fix Vars to have the desired varno */ > 1228 if (varno != 1) > 1229 ChangeVarNodes((Node *) pcqual, 1, varno, 0); > 1230 > 1231 result = list_concat(result, pcqual); > 1232 } > > Because of this, the first time through the partition key expressions are > valid, but then onwards they are restamped with the varno of the first > partition. > > Please add testcases to your patch to catch such types of issues. I will integrate tests into the patch(es) and add some more. Thanks, Amit -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers