I wrote:
> try writing
> WHERE 'ABCDE' >= pr_min AND 'ABCDE' <= pr_max
> AND pr_min < (SELECT pr_min FROM table
> WHERE pr_min > 'ABCDE'
> ORDER BY pr_min LIMIT 1)
> The idea here is to add an upper bound on pr_min to the index scan
> conditions, so that the scan can stop short of the end of the index.
Argh, got that backwards. What you are missing is a *lower* bound on
pr_min, and the index scan will therefore run from the start of the
index up to pr_min = 'ABCDE'. So reverse the sense of the added test:
AND pr_min >= (SELECT pr_min FROM table
WHERE pr_min <= 'ABCDE'
ORDER BY pr_min DESC LIMIT 1)
regards, tom lane