当值为null时,临时表列类型错误



在整理数据库表时,我使用临时表来保存一些数据。缩小后,它是这样的:

CREATE TEMP TABLE fw_temp AS SELECT time, version, device_id FROM fw_status;
DELETE FROM fw_status;
INSERT INTO fw_status SELECT * FROM fw_temp

在INSERT语句中,我得到了一些。。当device_id列中的值为null时的有趣行为:

SQL错误[42804]:错误:列"device_id";是bigint类型,但表达式是text类型提示:您需要重写或强制转换表达式。

正如错误消息可能导致的那样,device_id确实是表中的bigint类型,但当我们从临时表中选择时,它似乎丢失了类型。

进行一般选择,

CREATE TEMP TABLE fw_temp AS SELECT * FROM fw_status;
DELETE FROM fw_status;
INSERT INTO fw_status SELECT * FROM fw_temp

有趣的是,这并没有导致这个错误。

现在,实际的临时表有点复杂,所以遗憾的是,使用SELECT*不是一个选项。我该如何处理这个错误?

更改为

CREATE TEMP TABLE fw_temp AS SELECT time, version, device_id FROM fw_status;
DELETE FROM fw_status;
INSERT INTO fw_status (time, version, device_id) SELECT time, version, device_id FROM fw_temp

解决了这个问题。显然,您可以混合通用选择和通用插入或特定选择和特定插入,但不能混合通用选择与特定插入。我仍然对正在发生的事情感到困惑。任何启示都将受到的赞赏

最新更新