在pgAdmin 4中使用SQL插入数据时遇布尔与整数类型不匹配错误求助
解决PostgreSQL中"column is of type Boolean but expression is of type integer"插入错误
问题根源
你插入数据时给Boolean类型的列传入了整数(0/1),PostgreSQL默认不会自动把整数隐式转换为布尔值,因此触发该错误。
具体解决方法
直接使用布尔字面量
在INSERT语句里用TRUE/FALSE或者t/f(大小写不敏感)代替0/1。示例:INSERT INTO your_table (bool_column, other_col) VALUES (TRUE, 'test'); -- 也可用简写形式 INSERT INTO your_table (bool_column, other_col) VALUES (t, 'test');显式转换整数为布尔值
如果数据源只能提供整数,可通过CAST()或::操作符强制转换:-- 使用CAST函数 INSERT INTO your_table (bool_column, other_col) VALUES (CAST(1 AS BOOLEAN), 'test'); -- 使用PostgreSQL特有::操作符 INSERT INTO your_table (bool_column, other_col) VALUES (0::BOOLEAN, 'test');注意:PostgreSQL仅支持1转为TRUE、0转为FALSE,其他整数会触发转换错误。
检查插入语句的列值对应关系
确认INSERT语句的列顺序与值的顺序完全匹配,避免将整数类型的值误传到Boolean列位置。比如:
错误示例:-- 假设表结构为 (id INT, active BOOLEAN),此处将整数传入了active列 INSERT INTO your_table VALUES (123, 1);修正后:
INSERT INTO your_table VALUES (123, TRUE);不推荐:修改数据库参数允许隐式转换
可调整postgresql.conf中的类型转换参数,但这会破坏数据库的类型安全性,容易引发其他潜在问题,非特殊需求不建议操作。
内容的提问来源于stack exchange,提问作者Kurtis
相关产品推荐
相关产品推荐

