postgres 9.1: role public does not exist
As @Evan Carroll said, there is no "public" role. The manual has this to say:


  The key word PUBLIC indicates that the privileges are to be granted
      to all roles, including those that might be created later. PUBLIC
      can be thought of as an implicitly defined group that always
      includes all roles. Any particular role will have the sum of
      privileges granted directly to it, privileges granted to any role
      it is presently a member of, and privileges granted to PUBLIC.


...


  Unlike the case with privileges, membership in a role cannot be
      granted to PUBLIC.