我正在运行一个非常大的查询,在表中插入很多行,近 800 万行划分为一些较小的查询,但在某些时刻出现错误:“我收到错误”无法写入块...... .临时文件的设备上没有剩余空间...“使用 postgresql”。我不知道每次查询后是否需要删除临时文件以及如何执行此操作,或者它是否与另一个问题相关。
谢谢
好的。由于仍然缺少一些事实,尝试回答以澄清问题:
您的磁盘空间似乎已用完。很可能是因为您的磁盘空间不足。检查 Linux/Unixdf -h
例如。
为了向您展示这是如何发生的:
一个表可能有 3 个整数,仅数据就占用大约 12 个字节。您需要为其添加一些开销以进行行管理等。另一个答案 https://stackoverflow.com/a/13570853/2915834Erwin 提到了 23Byte 并链接到手册以获取更多信息。另外,行之间可能需要一些填充等。所以做一些数学计算:
即使使用 3 整数,每行最终也会有大约 40 字节。考虑到您想要插入 8,000,000,这总计将达到 320,000,000Byte 或 ~ 300MB(仅适用于我们的 3 个整数示例,非常粗略)。
现在,您在该表上有几个索引,索引也会在插入过程中增长。另外,另一个方面可能是表和索引膨胀,可以用真空吸尘器清除。
那么解决办法是什么呢:
- 为数据库提供更多磁盘空间
- 将插入件再分开一点,并确保它们之间存在真空
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)