Explication de @A.H est exact pour PostgreSQL 9.1 ou antérieur . Il est donc applicable pour l'OP, qui utilise la version obsolète 8.3.
Cependant, PostgreSQL 9.2 apporté une mise à jour substantielle dans ce domaine. Les fonctions PL/pgSQL sont devenues beaucoup plus intelligentes quant au moment de replanifier. Je cite les notes de version pour 9.2 ici
J'insiste sur moi.
Ergo :Une solution pour l'OP serait de mettre à niveau vers PostgreSQL 9.2+ et tout devrait fonctionner correctement automatiquement.