Dan*_*iel 7 postgresql insert postgresql-9.4
我创建了一个用于实践的小型开发数据库。它有一个cities
包含列cityname
和的表state
。该cityname
中有“辛辛那提”,长的名字吧?
mytestdb=# SELECT * FROM cities;
cityid | cityname | state
--------+------------+-------
12345 | Cincinnati | Ohio
(1 row)
Run Code Online (Sandbox Code Playgroud)
我不清楚在尝试添加“旧金山”时如何以及为什么会收到此错误消息。
Run Code Online (Sandbox Code Playgroud)mytestdb=# INSERT INTO cities VALUES ('San Francisco','CA'); ERROR: value too long for type character varying(5)
那么首先,有什么区别..
SELECT x, length(x)
FROM ( VALUES
('Cincinnati'),
('San Francisco')
) AS t(x);
Run Code Online (Sandbox Code Playgroud)
这是输出
x | length
---------------+--------
Cincinnati | 10
San Francisco | 13
Run Code Online (Sandbox Code Playgroud)
所以..
此外,如果Cincinnati
位于 a 中varchar(5)
,则必须将其截断。
所以问题是你的cityid
。这是varchar(5)
。无论如何,你可能希望它是一个int
——它会更紧凑、更快。所以ALTER
表并修复它。
ALTER TABLE cities
ALTER COLUMN cityid SET DATA TYPE int
USING cityid::int;
Run Code Online (Sandbox Code Playgroud)
顺便说一句……也许有一天 PostgreSQL 会在错误消息中说出列名。在那之前至少它比 SQL Server 更详细。