SELECT * FROM test WHERE (name='b' and name2>'a') OR (name>'b') ORDER BY
name,name2 ASC LIMIT 1;
Write that WHERE clause instead as:
 WHERE name>='b' AND (name>'b' OR (name='b' AND name2>'a'))
This is logically equivalent, but it gives the planner a better handle on
how to use an index scan to satisfy the query.

I thought the planner had an automatic rewriter for these situations. It'd be interesting to see an EXPLAIN ANALYZE output to see if it's indeed rewritten.


SELECT * FROM test WHERE (name='b' and name2<'a') OR (name<'b') ORDER BY
name,name2 DESC LIMIT 1;
That needs to be ORDER BY name DESC, name2 DESC (the direction indicator
applies per-column and not to the output ordering). Same goes for the
WHERE clause in this query as the previous one, too.

You're right, I screwed up ! Sorry ;)



---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to