Presumably the length validation is being done before the trigger is run. Is there some way this could be changed so the trigger happens first?
The input tuple passed into the trigger is a valid record of the same type as the table to which it is attached. This means that while table constraints are not enforced all column values must already be valid for the defined column type. I suspect changing this property of the system is unlikely though I agree that I too have sometimes wished that a trigger could be used to make invalid data, for a given type, valid.
Some hackish use of views, and triggers thereon, may provide an avenue to gradual migration.
David J.