0

ドライブ容量が限られている組み込みシステムで PostgreSQL を使用しています。これで、DB ドライブがいっぱいになりました。データを削除しても、スペースが解放されないようです。VACUUM FULL を試みましたが、スペースが必要です。最後に残ったインデックスも削除します。

ランダムに物を削除せずにスペースを解放する方法についてのアイデアはありますか? 以前のデータの一部を失うことはできますが、VACUUM FULL を実行するのに十分なスペースがないため、実際にはそれを行うことができないようです。

4

3 に答える 3

2

PostgreSQLモデルを使用しMVCCます。これは、削除されたレコードがスペースを空きとしてマークすることを意味します (それらを削除したトランザクションがコミットされた後) が、テーブルによって予約されたままです。

より前は、追加のスペースを必要とせずにテーブル内のデータを移動するためPostgreSQL 9.0に使用されていました。VACUUM FULL

ではPostgreSQL 9.0、 の動作VACUUM FULLが変更され、テーブルの完全なコピー用に追加の領域が必要になりました。

テーブルからインデックスを削除し、最小のものから始めて 1 つずつバキューム処理を試みることができます。

于 2011-05-04T12:56:40.127 に答える
0

この時点での最も簡単な答えは、データベースを別のドライブ/コンピューターにダンプすることです(たとえば、を使用するpg_dumpか、pg_dumpall複数のデータベースがある場合は、特別なバックアップ/復元プロセスを必要とするラージオブジェクトなどを念頭に置いてください)。データベースを削除して再作成します。

スペースが少し残っている場合は、を試してみてください。これにより、スペースvacuum full smallesttableを終了して解放し、次に小さいテーブルをバキュームすることができます。

ドライブが完全にいっぱいになると、データベースサーバーはおそらく起動を拒否し、どちらも実行できなくなります。その場合、データディレクトリ全体を同じCPUアーキテクチャとより多くのディスク容量を持つ別のコンピュータに移動し、そこでpostgresqlを開始してバキュームを実行できます。

于 2011-05-04T12:51:32.767 に答える
0

特定の状況では、VACUUM (満杯ではない) はディスク領域の一部を再利用できます。(OSにとって完全に機能していないページが返されると思います。)これにより、VACUUM FULLから始めるのに十分なスペースが解放される可能性があります。ただし、1 つのテーブルがディスクの空き容量を超えて大きくなることは得策ではありません。

于 2011-05-05T00:09:54.400 に答える