如何从INSERT命令的非数组字段获取数组?

时间:2013-05-31 16:06:44

标签: arrays postgresql

我正在尝试将SELECT语句与INSERT INTO命令一起使用。如果没有小问题,一切都会正常工作:表格的某些字段定义为real[],但我的输入为numeric。因此,问题是:

PostgreSQL中是否有一个函数可以在单个数字输入中创建一个real类型的数组(只有一个元素)?

我的设置如下:

tempLogTable(..., logValue NUMERIC, ...)
finalLogTable(..., logValues REAL[], ...)

我们的想法是使用tempLogTable将元组从finalLogTable插入到INSERT INTO ... SELECT ...。不幸的是,由于各种原因,给出了数据类型,我暂时不想改变它们(不要破坏任何东西)。

我正在使用PostgreSQL 9.2。

1 个答案:

答案 0 :(得分:3)

SELECT ARRAY[thenumeric::real] FROM the_table;

SELECT ARRAY[thenumeric]::real[] FROM the_table;

对于单元素阵列,它们并没有什么不同。

realnumeric没有的限制。特别是,比较real值的相等性并不可靠;你应该比较两个不同的数字小于一个小的(有点任务特定的)数量。它也不能像数字那样表示大小的值。有关比较浮点数的其他信息,请参阅the floating point guide。当它们被包裹在数组中时,这将更难做到。

出于您描述的目的,听起来您只是收集统计数据或历史数据,这不会成为问题。它通常只是人们试图写的问题:

WHERE some_real = some_other_real

会导致令人惊讶和意外的行为。

如上所述,您应该使用INSERT INTO ... SELECT