Dan Black <fireworker@gmail.com> writes:
> 1)
> select * from my_table where active and deleted
> --------------
> Seq Scan on my_table (cost=100000000.00..100000180.00 rows=2500 width=56)
> Filter: (active AND deleted)
> 2)
> select * from my_table where active = true and deleted = true
> -------------
> Index Scan using my_table_index on my_table (cost=0.00..369.00 rows=2500
> width=56)
> Index Cond: ((deleted = true) AND (active = true))
This is expected: Postgres' internal index API is based around
operators, therefore anything that doesn't look something like
"indexcol operator value" isn't a candidate for an index restriction.
There is a hack in CVS tip that special-cases indexes on boolean
columns so that the above case works, but it's not in any released
version.
regards, tom lane