Hi Eliot,
> If I continue to run vacuum
> analyze on it, it continues to take about 90 seconds each time.
> [..]
> I was under the impression that if nothing had been done to the table
> since it was last vacuumed, that it would return immediately.
in addition to what others already said, I'd expect that by specifying
ANALYZE you are forcing PostgreSQL to do quite expensive additional work.
Is there a reason why you cannot (or do not want to) rely on
autovaccuum? Have you tried tuning the parameters?
Even if you must use manual VACUUMs, you can probably get away without
ANALZE.
Best regards,
-hannes