Re: [sqlsmith] Planner crash on foreign table join
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andrew Gierth <andrew@tao11.riddles.org.uk>
Cc: Andreas Seltenreich <seltenreich@gmx.de>, pgsql-hackers@postgresql.org,
Simon Riggs <simon@2ndquadrant.com>
Date: 2017-04-08T19:57:25Z
Lists: pgsql-hackers
I wrote: > Andrew Gierth <andrew@tao11.riddles.org.uk> writes: >> Commit ac2b095088 assumes that clauselist_selectivity is being passed a >> list of RelOptInfo, but postgres_fdw is passing it a list of bare >> clauses. One of them is wrong :-) > It's a bit scary that apparently none of the committed regression tests > caught that. Experimentation shows that actually, the standard regression tests provide dozens of opportunities for find_relation_from_clauses to fail on non-RestrictInfo input. However, it lacks any IsA check, and the only thing that it does with the alleged rinfo is if (bms_get_singleton_member(rinfo->clause_relids, &relid)) As long as there's some kind of object pointer where the clause_relids field would be, it's highly likely that bms_get_singleton_member will just return false without crashing, thereby obscuring the fault. Andreas' example kills it by causing the argument to be a Param node, whose field layout doesn't put a pointer there. This makes me wonder whether we were being penny-wise and pound-foolish by not making Bitmapsets be a kind of Node, so that there could be IsA assertions in the bitmapset.c routines, as there are for Lists. Most Bitmapsets in a typical backend probably have only one payload word (ie highest member < 32), so right now they occupy 8 bytes. Adding a nodetag would kick them up to the next palloc category, 16 bytes, which is probably why I didn't do it like that to begin with. Still, that decision is looking unduly byte-miserly in 2017. regards, tom lane
Commits
-
Improve castNode notation by introducing list-extraction-specific variants.
- 8f0530f58061 10.0 landed
- ff9398052df5 9.3.17 landed
- be182d570210 9.6.3 landed
- bcb1a27dc039 9.5.7 landed
- ba0a0f3ed9e0 9.2.21 landed
- 89a41a1b6b71 9.4.12 landed
-
Clean up bugs in clause_selectivity() cleanup.
- eef8c0069e4d 10.0 landed
-
Add newly-symlinked files to "make clean" target.
- aba696d1af9a 10.0 cited
-
Reset API of clause_selectivity()
- ac2b09508834 10.0 cited