@A.H:s förklaring är korrekt för PostgreSQL 9.1 eller äldre . Så det är tillämpligt för OP, som använder den föråldrade versionen 8.3.
Men PostgreSQL 9.2 kom med en rejäl uppdatering på detta område. PL/pgSQL-funktioner har blivit mycket smartare när det gäller att planera om. Jag citerar releasekommentarerna för 9.2 här
Djärv betoning min.
Ergo:En lösning för OP skulle vara att uppgradera till PostgreSQL 9.2+ och allt borde bara fungera bra automatiskt.