postgresql – 将varchar字段的类型更改为整数:“不能自动转换为类型整数”

前端之家收集整理的这篇文章主要介绍了postgresql – 将varchar字段的类型更改为整数:“不能自动转换为类型整数”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个小表,某个字段包含类型“字符变化”。我试图将其更改为“整数”,但它给出一个错误,铸造是不可能的。

有没有办法,或者我应该创建另一个表,并使用查询将记录带入它。

该字段只包含整数值。

没有从文本或varchar到整数的隐式(自动)强制转换(即,您不能将varchar传递给期望整数的函数或将varchar字段分配给整数),因此必须使用 ALTER TABLE … ALTER COLUMN … TYPE … USING指定显式转型:
ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer);

请注意,您可能在文本字段中有空格;在这种情况下,使用:

ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);

在转换前去除空白区域。

如果命令在psql中运行,错误消息显而易见,但是可能PgAdmin-III不会显示完整的错误。这里是如果我测试它在Postgresql 9.2的psql会发生什么:

=> CREATE TABLE test( x varchar );
CREATE TABLE
=> insert into test(x) values ('14'),(' 42  ');
INSERT 0 2
=> ALTER TABLE test ALTER COLUMN x TYPE integer;
ERROR:  column "x" cannot be cast automatically to type integer
HINT:  Specify a USING expression to perform the conversion. 
=> ALTER TABLE test ALTER COLUMN x TYPE integer USING (trim(x)::integer);
ALTER TABLE

感谢@muistooshort添加USING链接

另见this related question;它是关于Rails迁移,但根本原因是相同的,答案适用。

猜你在找的Postgre SQL相关文章