Postgres:将布尔数据类型重写为数字

时间:2017-08-02 09:00:43

标签: sql postgresql type-conversion boolean

我有一个包含很多表的数据库,其中包含许多boolean类型的列。但我的软件不支持布尔值作为数据类型。他们的支持团队告诉我,我应该使用数字(1,0)而不是布尔值,所以我尝试了:

ALTER TABLE foo ALTER COLUMN bar TYPE numeric(1,0) USING bar::numeric(1,0)

我收到错误:无法将布尔值转换为数字类型。
如何用数字替换替换布尔列并保留布尔行为?这个数字(1,0)的东西可以工作吗?

1 个答案:

答案 0 :(得分:1)

你需要一个额外的步骤 - 首先转换为int:

t=# select true::int::numeric(1,0);
 numeric 
---------
       1
(1 row)

所以在你的情况下,它将是:

ALTER TABLE foo ALTER COLUMN bar TYPE numeric(1,0) USING bar::int::numeric(1,0)

但坦率地说我相信转换为int已经足够了。