Postgres 将字符变化视为整数

Postgres treats character varying as integer

我在数据类型 character varying 的关系模式中有一列。虽然该列是 character varying 我一直在插入 integer 类型的数据,但直到我真正需要输入字符变化类型的数据时才意识到错误。这是我得到的错误

insert into my_table(bad_column) values ('bad column');  

Error: invalid input syntax for integer: "bad column".

可能是什么问题?我已经通过 运行 下面的代码确认了列的数据类型,它实际上是 returns 字符变化

select pg_typeof(bad_column) FROM my_table limit 10 

您应该检查 table 定义是否有检查约束,例如

create table test(bad_column varchar check (bad_column::int > 0));
insert into test (bad_column) values ('a text');

ERROR:  invalid input syntax for integer: "a text"

另一种选择是将触发器中的列强制转换为整数。

这两种情况都是比较奇怪的解决方案,您应该将列的类型更改为整数。