我有一个整型非空默认值为0的字段,我需要将其更改为bool.

这就是我正在使用的:

ALTER TABLE mytabe 
ALTER mycolumn TYPE bool 
USING 
    CASE 
        WHEN 0 THEN FALSE 
        ELSE TRUE 
    END;

但我得到了:

ERROR:  argument of CASE/WHEN must be type boolean, not type integer

********** Error **********

ERROR: argument of CASE/WHEN must be type boolean, not type integer
SQL state: 42804

有什么 idea 吗?

谢谢

推荐答案

试试这个:

ALTER TABLE mytabe ALTER COLUMN mycolumn DROP DEFAULT;
ALTER TABLE mytabe ALTER mycolumn TYPE bool USING CASE WHEN mycolumn=0 THEN FALSE ELSE TRUE END;
ALTER TABLE mytabe ALTER COLUMN mycolumn SET DEFAULT FALSE;

您需要首先删除约束(因为它不是布尔值),其次,您的CASE语句在语法上是错误的.

Database相关问答推荐

如何将使用模块创建的 Redis RDB 文件迁移到没有该模块的部署? (RedisStack 版本 7.2+ 中不再包含 RedisGraph)

聚合以过滤 MongoDB 中的引用

将一个表中的多个列连接到另一个表中的单个列

如何打印出 sequelize 实例的表名?

关闭连接会自动关闭语句和结果集吗?

我们如何使用 Hibernate 和 JPA 调用存储过程?

在迁移中添加行

两个不同数据库中的两个表之间的连接有什么问题?

返回 DataSet/DataTable 的 PowerShell 函数中的奇怪行为

SOA 和共享数据库

来自外部源的 Django 用户和身份验证

如何在数据库中搜索和替换字符串的所有实例?

添加具有初始(但不是默认)值的新列的最佳方法?

如何配置 NLog 以写入数据库?

在数据库中存储年份

将内存数据库保存到磁盘

多币种 - 存储什么以及何时转换?

查询以查找列的 nᵗʰ 最大值

Cassandra - 事务支持

在 Heroku 上预编译assets时如何普遍跳过数据库接触