The answer is no.
Don't add a length modifier to
varchar if you can avoid it. Most of the time, you don't actually need a length restriction anyway. Just use
text for all character data. Make that
varchar (no length modifier) if you need to stay compatible with RDBMS which don't have
Performance is almost the same -
text is a bit faster in rare situations, and you save the cycles for the check on the length.
If you actually need to enforce a maximum length, still use
text and add a check constraint for that:
ALTER TABLE tbl ADD CONSTRAINT tbl_col_len CHECK (length(col) < 51);
You can modify or drop such a constraint at any time without having to mess with the table definition and all depending objects (views, functions, foreign keys, ...)
With length modifiers you just run into problems like this or this or this ...
PostgreSQL 9.1 introduced a new feature to alleviate the pain somewhat. I quote the release notes here:
ALTER TABLE ... SET DATA TYPE to avoid table rewrites in
appropriate cases (Noah Misch, Robert Haas)
For example, converting a
varchar column to text no longer requires a
rewrite of the table. However, increasing the length constraint on a
varchar column still requires a table rewrite.