PostgreSQL: DELETE won't free memory
I use PostgreSQL on an embedded system with limited drive space. Now the DB-drive is full. When I delete data, it doesn't seem to free up any space. I tried to VACUUM FULL, but that requires space. So does deleting the last remaining index.
Any ideas on how to free up space without randomly deleting stuff? I can afford to lose some of the data from back when, but I can't seem to actually do it, since there 开发者_Python百科isn't enough space to VACUUM FULL.
PostgreSQL
uses MVCC
model which means that deleted records mark their space as free (after the transaction which deleted them had been committed) but it is still reserved by the table.
Prior to PostgreSQL 9.0
, VACUUM FULL
used to move the data inside the table without need for additional space.
In PostgreSQL 9.0
, behavior of VACUUM FULL
had changed and now it requires additional space for the full copy of the table.
You may try to drop the indexes from the tables and vacuum them one by one, starting from the least one.
The easiest answer at this point would be to dump the database to a different drive/computer (for instance, using pg_dump
, or pg_dumpall
if you have more than one db, and keeping in mind things like Large Objects that need special backup/restore processes) then drop and recreate the database.
If there's a tiny bit of space left, you might try vacuum full smallesttable
, which might be able to finish and free up some space to vacuum the next smallest table, and so on.
If you end up filling the drive completely, the database server will probably refuse to start and you won't be able to do either of those. In that case, you could move the entire data directory to another computer with the same CPU architecture and more disk space, then start postgresql there to perform the vacuum.
In certain situations VACUUM (not full) can reclaim some disk space. (I think it will return pages that are totally dead to the OS.) That might free up enough space to begin with the VACUUM FULL. But it's not a good idea to let one table grow to more than the amount of disk free space.
精彩评论