> I dided the codes, in QueueFKConstraintValidation(), we add three > newconstraint for the > fk rel, because the pk rel is partition table. > > During phase 3 of AlterTable, in ATRewriteTables(), > call validateForeignKeyConstraint() three times. > The first time the pk rel is pk, and it's ok. > The second time the pk rel is only pk_1, and the type(1) is not in pk_1, so > an error is reported. > > In this case, the two children newconstraint should not be added to the > queue.
Yeah, I reached the same conclusion and this is the preliminary fix I had written for it. I don't like that I had to duplicate a few lines of code, but maybe it's not too bad. Also the comments need to be clarified a bit more.
If the child table is still a partitioned table, the patch seems not work.
I figure out a quick fix as the attached. I add a bool argument into the QueueFKConstraintValidation().
If it is true, it means we recursively call QueueFKConstraintValidation(), then we don't add the newconstraint to the queue.