postgresql - Postgres - 临时文件大小超过 temp_file_limit

标签 postgresql jdbc database-cursor

我尝试使用 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/

相关文章:

java - 如何连接到 Docker Swarm 中的 Postgresql 服务?

java - PostgreSQL JDBC 池

MySQL 结果由存储过程中的多行组成

Android如何查询android中巨大的数据库(光标大小限制为1MB)

java - Postgres 异常和 java

postgresql - 如何使用 Azure PostgreSQL 在 keycloak 中强制实现 SSL

java - 如何使用 MySQL Connector/J 8 配置 Wildfily 12 或 JBoss?

java - 使用日期类型更新 JTable 单元格

MySQL 存储过程的游标给出错误

sql - 在postgresql中将行转换为字符串