Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带嵌套查询的PostgreSQL插入失败,行数太多_Postgresql - Fatal编程技术网

带嵌套查询的PostgreSQL插入失败,行数太多

带嵌套查询的PostgreSQL插入失败,行数太多,postgresql,Postgresql,我试图使用嵌套SQL语句将数据插入PostgreSQL表。我发现我的插入可以处理嵌套查询返回的一小行(几千行)。例如,当我尝试: insert into the_target_table (a_few_columns, average_metric) SELECT a_few_columns, AVG(a_metric) FROM a table GROUP BY a_few_columns LIMIT 5000) 但是,当我删除我的限制(无限制的内部查询返回大约30

我试图使用嵌套SQL语句将数据插入PostgreSQL表。我发现我的插入可以处理嵌套查询返回的一小行(几千行)。例如,当我尝试:

insert into the_target_table (a_few_columns, average_metric)

    SELECT a_few_columns, AVG(a_metric)
    FROM a table
    GROUP BY a_few_columns LIMIT 5000)
但是,当我删除我的
限制
(无限制的内部查询返回大约30000行)时,相同的查询失败:

错误:整数超出范围

a_度量
是双精度,而
a_数列
是文本。我已经尝试了限制行,它似乎可以插入的行数为14000行,而不会抛出错误。我不知道这是非确定性的,还是抛出错误之前的一个常量阈值

我已经浏览了关于这个主题的其他一些SO帖子,并将我的表主键数据类型更改为
BIGINT
。我仍然会犯同样的错误。然而,我不认为这是一个数字溢出的问题,因为我正在进行的插入数量很小,甚至没有接近阈值的地方


有人知道是什么导致了这个错误吗?

这里的问题是我想插入的表中的
avg\u metric
字段定义不正确。我不小心把它定义为一个整数。这通常不是一个大问题,但我也有一些无穷大的值(
inf
)。一旦我将字段数据类型切换为双精度,我就能够成功插入。当然,如果我的应用程序在尝试插入之前预先检查了有限值,这可能是最好的——通常我会通过断言以编程方式进行检查,但对于嵌套查询,我并不费心检查

我使用的最后一个查询是

插入到\u目标\u表中(几个\u列,平均\u度量)


一个更好的解决方案是先通过
a_表
并替换所有
inf

以这种方式插入数百万行(
insert…select…
)不是问题。30000行确实不能给服务器留下深刻印象。您应该在其他地方搜索错误的原因。独立
选择功能是否正常工作?
insert
select
中的列类型是否完全相同?(等)表中的列数、平均值和度量的数据类型是什么_table@Gaj我编辑了我的问题来回答你的问题。是否可能平均值(a_度量)返回的小数点超过15?你能不受限制地尝试使用round(AVG(a_metric),2)吗?如果不知道所有表的定义,这是不可能回答的。
SELECT a_few_columns, CASE WHEN AVG(a_metric) = 'inf' THEN NULL ELSE AVG(a_metric) END
FROM a_table
GROUP BY a_few_columns LIMIT 5000)