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..
- San Francisco is three characters longer.
- They're both over 5 characters.
- 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. until then at least it's more verbose than SQL Serverat least it's more verbose than SQL Server.