带嵌套查询的PostgreSQL插入失败,行数太多
我试图使用嵌套SQL语句将数据插入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
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)