我尝试使用 JDBC 游标 (setFetchSize) 发出读取所有请求 (select * from tblName)。 postgresql.conf 中的 temp_file_limit 属性为 500 KB。当我执行准备好的语句时,出现 psql 异常 -
org.postgresql.util.PSQLException: ERROR: temporary file size exceeds temp_file_limit (500kB)
PostgreSQL.conf 中的文档显示“# 限制每个 session 临时文件空间”。 https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor根据此链接,连接必须禁用自动提交,而我没有禁用它。我也这样做了,但最终遇到了同样的问题。我的理解是,如此大的读取操作在加载到结果集之前会写入临时文件。如果是这种情况,那么在 temp_file_limit 较低的情况下,我将永远无法读取非常大的数据,即使使用游标也是如此。这对于为什么它首先是可配置的没有意义。
将 temp_file_limit 设置为 -1(无限制文件大小)为我解决了这个问题。我采取这种方法正确吗?
最佳答案
我见过一些查询会使用大量空间(有时超过 1TiB),一直持续到所有可用空间都被用完并且其他查询开始崩溃为止。将其设置为合理的(在我们的例子中)100GiB 会保护其他 session 。
将其设置为 500kB 似乎确实没有意义。
仅供引用,临时文件不仅用于游标。
关于postgresql - Postgres - 临时文件大小超过 temp_file_limit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53554929/