postgresql 值为空时临时表列类型错误

r8xiu3jd  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(107)

在整理数据库表时,我使用临时表来保存一些数据。缩小范围后,它类似于:

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列中的值为空时,我得到了一些有趣的行为:
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 * 不是一个选择。我该如何处理这个错误呢?

bhmjp9jg

bhmjp9jg1#

变更为

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

我解决了这个问题。显然,你可以混合通用选择和通用插入,或者特定选择和特定插入,但不能混合通用选择和特定插入。我仍然不明白这是怎么回事。如果有任何启示,我将不胜感激

相关问题