我尝试使用JDBC游标(setFetchSize)发出读取所有请求(从tblName中选择*)。 postgresql.conf中的temp_file_limit属性为500 KB。当执行准备好的语句时,我得到一个psql异常-
org.postgresql.util.PSQLException:错误:临时文件的大小超过了temp_file_limit(500kB)
PostgreSQL.conf中的文档说“#限制每个会话的临时文件空间”。 https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor(根据此链接),该连接必须已禁用自动提交,而我尚未禁用它。我也这样做了,但最终还是遇到了同样的问题。我的理解是,如此大的读取操作在加载到结果集之前会写入一个临时文件。如果是这种情况,那么在temp_file_limit较低的情况下,即使使用游标,我也将永远无法读取非常大的数据。这对于为什么首先使其可配置没有意义。
将temp_file_limit设置为-1(无限制文件大小)对我来说解决了这个问题。我采用这种方法正确吗?
答案 0 :(得分:1)
我看到查询会占用很多空间(有时超过1TiB),一直持续到所有可用空间都用完并且其他查询开始崩溃为止。设置为合理(在我们的情况下)100GiB可以保护其他会话。
将其设置为500kB似乎毫无意义。
FYI临时文件不仅用于游标。