当前位置: 首页 > 知识库问答 >
问题:

将Postgres整数列更改为boolean类型

祁权
2023-03-14

我最近一直在优化我们的一些Postgres表,尽可能将更复杂的数据类型转换为更简单的数据类型。到目前为止,除了一种情况外,其他情况都相当简单,例如:

ALTER TABLE产品ALTER列价格TYPE整数使用price::整数;

对于将文本转换为自定义枚举数据类型,这也非常简单。我刚刚编写了一个PLPGSQL函数,将文本转换为枚举,然后将列转换为:

ALTER TABLE products使用text_to_color_enum(颜色)更改列颜色类型color_enum

不过,在我必须将整数转换为布尔值的情况下,这种语法会失败。这些都失败了:

ALTER TABLE products ALTER return_policy TYPE boolean使用return_policy

ALTER TABLE产品ALTERreturn_policyTYPE boolean USING bool(return_policy);

ALTER TABLE products使用bool(return_policy)更改列return_policy TYPE boolean

ALTER TABLE products ALTER COLUMN return_policy TYPE boolean使用CASE WHEN return_policy

错误消息总是相同的:

错误:运算符不存在:boolean=integer

提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换

该列中没有空值。所有值要么为零,要么为正<代码>从产品限额1中选择pg_类型(退货政策) 返回整数。创建从整数到布尔值的自定义转换失败,因为显然已经存在一个转换。同样的事情也发生在9.4和9.5级的研究生身上。我做错了什么?


共有2个答案

牛骞仕
2023-03-14

我的一个部分索引有一个条件WHEREreturn_policy=30。(这个数字意味着返回策略的天数,但是因为我们给出的是没有返回策略或30天返回策略,所以它不再是一个int就没有意义了。)删除索引允许我原来的SQL代码正确运行。

马坚白
2023-03-14

验证该列是否为约束,如果是,则需要在更改类型之前删除约束。

ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
ALTER TABLE products ALTER price TYPE bool USING CASE WHEN price = 0 THEN FALSE ELSE TRUE END;
ALTER TABLE products ALTER COLUMN price SET DEFAULT FALSE;
 类似资料:
  • 问题内容: 在pgsql中,有一种方法可以建立一个包含多个值的表,然后选择其中一个值(例如other_id),找出其最大值,并使表中的每个新条目都从该值开始递增。 我想这太容易了,没有机会工作。 非常感谢您的见解! 问题答案: 快速浏览一下文档会告诉您 数据类型smallserial, serial 和bigserial 不是真实类型, 而只是创建唯一标识符列的符号方便 如果你想使现有的(整数)列

  • 如何将JComboBox项更改为整数 这是我如何使JComboBox和它是不可编辑的,我如何编辑它?

  • 我们使用的是Oracle,我们有一个要求,允许希腊字符存储在数据库中。目前,我们的DB实例不允许我们插入希腊字符,如“?”。在谷歌上,我发现这与字符集有关。我的oracle使用不支持希腊字符的nls_characterset-we8mswin1252。如果必须工作,我必须将字符集更改为AL32UTF8、UTF8、AL16UTF16或WE8ISO8859P7之一。既然数据库中已经有了这么多的数据,现

  • 问题内容: 我正在从在Varchar中具有原始提要的表中导入数据,我需要将varchar中的列导入到字符串列中。我尝试使用以及,但是却遇到了错误,因为有一些空字段,我需要将它们作为空或null检索到新表中。 请让我知道是否有相同的功能。 问题答案: 大胆猜测:如果您的值是一个空字符串,则可以使用NULLIF将其替换为NULL:

  • 问题内容: 我想将表列更改为可为空。我用过了: 这会导致出现错误。正确的语法是什么? 问题答案: 假设(基于您之前的问题): 用您的实际数据类型替换。

  • 问题内容: 我试图在事实发生后修改表使其成为主键列。我尝试了以下SQL,但收到语法错误通知。 我做错什么了吗? 问题答案: