如何解决postgresql中的“无法写入临时文件块:设备上没有剩余空间”?

Posted

技术标签:

【中文标题】如何解决postgresql中的“无法写入临时文件块:设备上没有剩余空间”?【英文标题】:How to resolve "could not write block of temporary file: No space left on device" in postgresql? 【发布时间】:2019-06-28 20:02:20 【问题描述】:

我在 postgres 中有本地数据库。其中单表包含“74980435”的数据。

当我尝试执行 SELECT 查询时,它会抛出此错误:

“无法写入临时文件的第 657567 块:设备上没有剩余空间”。

我正在尝试在 Laravel 中执行选择查询。

谁能帮帮我?

【问题讨论】:

可能相关:***.com/questions/52606584/… 【参考方案1】:

您的查询(您没有显示)可能缺少一两个连接条件,或者它试图对大量行进行排序或缓存大量函数结果或物化节点。

当数据不适合work_mem 时,PostgreSQL 开始将它们放入临时磁盘文件中。您的查询创建了足够的临时填充文件系统。

您可以设置temp_file_limit 参数作为防御,但您应该找出查询中的错误。

【讨论】:

查询没有错误,因为现在表包含“133072194”记录,我正在尝试执行“SELECT COUNT(test) FROM mytable WHERE test = false”,但它需要执行时间:128320.712毫秒 我已经在测试列上建立了索引。能否请您告诉我,我可以优化或更改什么,以便我的查询变得更快。 当然不是不知道查询和EXPLAIN (ANALYZE, BUFFERS) 输出。但是您应该为此提出另一个问题。

以上是关于如何解决postgresql中的“无法写入临时文件块:设备上没有剩余空间”?的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 和内存文件

如何解决实体映射中的 Grails 错误重复列?在现有的 Postgresql 数据库上

如何获取 postgresql 中的前 10 个值?

'~' 和 '^' 如何与 PostgreSQL 中的实际示例一起使用?

如何使用 Odoo 中的 ORM 连接到 PostgreSQL 中的另一个不同数据库?

PostgreSQL 锁表解决