Fix matching of boolean index columns to sort ordering.
Tom Lane <tgl@sss.pgh.pa.us>
Fix matching of boolean index columns to sort ordering. Normally, if we have a WHERE clause like "indexcol = constant", the planner will figure out that that index column can be ignored when determining whether the index has a desired sort ordering. But this failed to work for boolean index columns, because a condition like "boolcol = true" is canonicalized to just "boolcol" which does not give rise to an EquivalenceClass. Add a check to allow the same type of deduction to be made in this case too. Per a complaint from Dima Pavlov. Arguably this is a bug, but given the limited impact and the small number of complaints so far, I won't risk destabilizing plans in stable branches by back-patching. Patch by me, reviewed by Michael Paquier Discussion: https://postgr.es/m/1788.1481605684@sss.pgh.pa.us
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/optimizer/path/indxpath.c | modified | +46 −0 |
| src/backend/optimizer/path/pathkeys.c | modified | +24 −11 |
| src/include/optimizer/paths.h | modified | +2 −0 |
| src/test/regress/expected/create_index.out | modified | +42 −0 |
| src/test/regress/sql/create_index.sql | modified | +15 −0 |
Discussion
- Fixing matching of boolean index columns to sort ordering 6 messages · 2016-12-13 → 2017-01-15