>> No PG release since 7.3 would have voluntarily planned that query that >> way. Maybe you were using join_collapse_limit = 1 to force the join >> order?
> Yes, We have set join_collapse_limit set to 1.
Ah, so really your question is why join_collapse_limit isn't working as you expect. That code changed quite a bit in 8.2, and the way it works now is that the critical decision occurs while deciding whether to fold the cross-join (a sub-problem of size 2) into the top-level join problem. Which is a decision that's going to be driven by from_collapse_limit not join_collapse_limit.
So one way you could make it work is to reduce from_collapse_limit to less than 3, but I suspect you'd find that that has too many bad consequences for other queries. What's probably best is to write the problem query like this:
FROM table1 a cross join ( table2 b cross join table3 c )
which will cause join_collapse_limit to be the relevant number at both steps.