I found the difference.
Random_page_cost is 1 in the production 8.3.10, I guess weighting the decision to use "index scan".
Thanks for the replies, gentlemen.
> If you diff the postgresql.conf files for both installs, what's different?
In the list below, 8.3.10 parameter value is in the clear, (8.3.14 is in brackets)
Max_fsm_pages 819200 vs (204800)
Max_fsm_relations 4000 vs (dflt 1000)
Synchronous_commit off vs (dflt on)
Wal_buffers 256kb vs (dflt 64kb)
Checkpoint_segments 128 vs (dflt 3)
Random_page_cost 1 vs (dflt 4) #!!! Actually this is the difference in the explain plans
Constraint_exclusion on vs (dflt off)
.... a bunch of logging parameters have been set ....
Autovacuum_freeze_max_age 900000000 vs (dflt 200000000)
vacuum_freeze_min_age = 50000000 vs (dflt 100000000)
deadlock_timeout = 20s (vs dflt 1s)
add_missing_from = on (vs dflt off)