So first, what's the difference..

    SELECT x, length(x)
    FROM ( VALUES
      ('Cincinnati'),
      ('San Francisco')
    ) AS t(x);

Here is the output

           x       | length 
    ---------------+--------
     Cincinnati    |     10
     San Francisco |     13

So..

1. San Francisco is three characters longer.
2. They're both over 5 characters.
3. That can't be the problem.

And further, if `Cincinnati` was in a `varchar(5)`, it'd have to get truncated.

So the problem is your `cityid`. It is `varchar(5)`. you probably want that to be an `int` anyway -- it'll be more compact and faster. So `ALTER` the table and fix it.

    ALTER TABLE cities
      ALTER COLUMN cityid SET DATA TYPE int
      USING cityid::int;

As a side note... [maybe someday PostgreSQL will speak column names in error messages.](https://commitfest.postgresql.org/11/818/) until then [at least it's more verbose than SQL Server](https://dba.stackexchange.com/q/54924/2639).