I get an error “could not write block … of temporary file no space left on device …” using postgresql

前端 未结 3 1229
闹比i
闹比i 2021-02-19 04:35

I\'m running a really big query, that insert a lot of rows in table, almost 8 million of rows divide in some smaller querys, but in some moment appear that error : \"I get an er

3条回答
  •  生来不讨喜
    2021-02-19 05:27

    OK. As there are still some facts missing, an attempt to answer to maybe clarify the issue:

    It appears that you are running out of disk space. Most likely because you don't have enough space on your disk. Check on a Linux/Unix df -h for example.

    To show you, how this could happen: Having a table with maybe 3 integers the data alone will occupy about 12Byte. You need to add some overhead to it for row management etc. On another answer Erwin mentioned about 23Byte and linked to the manual for more information about. Also there might needs some padding betweens rows etc. So doing a little math:

    Even with a 3 integer we will end up at about 40 Byte per row. Having in mind you wanted to insert 8,000,000 this will sum up to 320,000,000Byte or ~ 300MB (for our 3 integer example only and very roughly).

    Now giving, you have a couple of indexes on this table, the indexes will also grow during the inserts. Also another aspect might could be bloat on the table and indexes which might can be cleared with a vacuum.

    So what's the solution:

    1. Provide more disk space to your database
    2. Split your inserts a little more and ensure, vacuum is running between them

提交回复
热议问题