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).