<p>How do I force Postgres to use an index when it would otherwise insist on doing a sequential scan?</p>

Assuming you're asking about the common "index hinting" feature found in many databases, PostgreSQL doesn't provide such a feature. This was a conscious decision made by the PostgreSQL team. A good overview of why and what you can do instead can be found
here
. The reasons are basically that it's a performance hack that tends to cause more problems later down the line as your data changes, whereas PostgreSQL's optimizer can re-evaluate the plan based on the statistics. In other words, what might be a good query plan today probably won't be a good query plan for all time, and index hints force a particular query plan for all time.
As a very blunt hammer, useful for testing, you can use the
```
enable_seqscan
```
and
```
enable_indexscan
```
parameters. See:
Examining index usage
```
enable_
```
parameters
These are
not suitable for ongoing production use
. If you have issues with query plan choice, you should see
the documentation for tracking down query performance issues
. Don't just set
```
enable_
```
params and walk away.
Unless you have a very good reason for using the index, Postgres may be making the correct choice. Why?
For small tables, it's faster to do sequential scans.
Postgres doesn't use indexes when datatypes don't match properly, you may need to include appropriate casts.
Your planner settings might be causing problems.
See also
this old newsgroup post
.