无法将数字类型转换为布尔类型

15
ALTER TABLE products ALTER COLUMN power_price DROP DEFAULT;
ALTER TABLE products ALTER COLUMN power_price TYPE bool USING (power_price::boolean);
ALTER TABLE products ALTER COLUMN power_price SET NOT NULL;
ALTER TABLE products ALTER COLUMN power_price SET DEFAULT false;

Postgres 给我返回了以下错误信息:

查询失败:ERROR: 无法将数字类型转换为布尔类型

1个回答

47

使用:

ALTER TABLE products ALTER power_price TYPE bool USING (power_price::int::bool);

numericboolean之间没有定义直接转换。你可以使用integer作为中间步骤。另一个选择是使用text,因为每种类型都可以从/到text进行转换。当然,对于text路线,值必须是1 / 0

更好的方法是,在一条命令中完成所有操作,以获得更好的性能和更短的锁定时间:

ALTER TABLE products
  ALTER power_price DROP DEFAULT
, ALTER power_price TYPE bool USING (power_price::int::bool)
, ALTER power_price SET NOT NULL
, ALTER power_price SET DEFAULT false;

手册中有关于ALTER TABLE的详细信息。

1
请注意,“值当然必须是1/0”的说法是不准确的。实际上,值可以是任何值。0将被视为false,而其他任何值都将被视为true。 - Mahou5
1
选择 12 :: INT :: BOOLEAN - Mahou5
@Mahou5:我的引用语仅适用于text作为过渡。考虑:SELECT 12::text::bool; -> ERROR: invalid input syntax for type boolean: "12"。因此,可以选择在转换时是否严格要求... - Erwin Brandstetter
你说得对。我只是基于“INT”作为中间值来指出这一点。 - Mahou5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接