PGSQL中如何将boolean列转换为bit varying类型 报错问题求助
PostgreSQL布尔类型列转bit varying类型报错解决方案
报错原因
- 核心转换逻辑错误:PostgreSQL中boolean值转text得到的是
t/f字符串,不符合bit类型的输入格式要求,无法直接转换 - 测试代码语法不规范:原建表语句末尾缺少分号,insert语句也缺少结束标识,会导致前置测试数据写入失败
正确解决方案
常规转换(true对应bit值1,false对应bit值0)
-- 修正后的测试数据初始化语句 CREATE TABLE test_div1( i boolean); INSERT INTO test_div1 VALUES('1'); INSERT INTO test_div1 VALUES('0'); -- 字段类型转换语句 ALTER TABLE test_div1 ALTER i TYPE bit varying USING (CASE WHEN i IS TRUE THEN B'1' ELSE B'0' END::bit varying);
指定位宽的转换
如果需要固定bit串的最大长度,比如指定最长为8位,可使用如下语句:
ALTER TABLE test_div1 ALTER i TYPE bit varying(8) USING (CASE WHEN i IS TRUE THEN B'00000001' ELSE B'00000000' END::bit varying(8));
结果验证
转换完成后执行如下语句可验证类型和值是否符合预期:
SELECT i, pg_typeof(i) FROM test_div1;
内容的提问来源于stack exchange,提问作者dn2301
相关产品推荐
相关产品推荐

