我正在运行一个非常大的查询,它在表中插入了很多行,将近800万行被分成了一些较小的查询,但是在某个时刻出现了错误:“我得到一个错误”不能写块。。。。设备上没有剩余空间…“使用postgresql”。我不知道每次查询后是否需要删除临时文件以及如何删除,或者是否与其他问题有关。
谢谢你
最佳答案
好 啊。由于仍有一些事实遗漏,试图回答可能澄清的问题:
似乎磁盘空间不足。很可能是因为磁盘空间不足。例如,检查Linux/Unixdf -h
。
为了向您展示这是如何发生的:
如果一个表可能有3个整数,那么数据本身将占用大约12字节。对于another answerErwin提到的大约23字节的行管理等,您需要增加一些开销,并链接到手册以获取更多信息。另外,行之间可能需要一些填充,所以需要做一些数学运算:
即使是3个整数,我们也会以每行40字节的速度结束。考虑到您希望插入8000000,这将总计为320000000字节或~300MB(仅用于我们的3个整数示例,非常粗略)。
现在,在这个表上有几个索引,这些索引在插入过程中也会增长。另外一个方面可能是表上的膨胀和索引,可以用真空清除。
那么解决方法是什么:
为数据库提供更多磁盘空间
把插入物再分开一点,确保它们之间有真空
关于postgresql - 我使用postgresql收到一个错误“无法写入临时文件的块……设备上没有剩余空间……”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23227695/