LoginSignup
3

More than 5 years have passed since last update.

[PostgreSQL] DISK FULL TRUNCATE できない

Posted at

ディスクFULLでTRUNCATEができない事案に遭遇したのでそのときの対処をメモで。

そもそも削除できなかった理由
PostgreSQLの場合、TRUNCATE時にも一時ディスク領域を使用するため、結局削除のために利用できるディスク領域が存在しないため、TRUNCATEができない事案に遭遇します。

対処法
1.追加ディスクをマウントする。
  USBでもNFSでもなんでもOKです。
  対象となるデータベースのディスクスペースの1.5倍程度の容量が必要です。
  このときはサーバがデータセンターにあったので追加ディスクが
  用意できなかったので、NFSサーバを緊急で立ててディレクトリをマウントしました。
2.追加ディスクにテーブルスペース保管用のディレクトリを作成する
3.対象データベースにコンソールログインする。
4.CREATE TABLESPACEで2で作ったディレクトリにディスクスペースを割り当てる
CREATE TABLESPACE backup_space LOCATION ‘追加ディスクに作成したディレクトリ’;
5.ALTER TABLE 対象テーブル SET TABLESPACE backup_space;
6.テーブルサイズが大きい場合は時間がかかります。
  経験則ですが28G程度で15分くらいかかりました。
7.完了するとディスクスペースが空いていますので、TRUNCATEが実施できます。
8.バックアップしたテーブルは元のディスクスペースに戻す場合は
  ALTER TABLE 対象テーブル SET TABLESPACE 元のテーブルスペース;
 で戻します。
9.戻し終わったら DROP TABLESPACE backup_space;
  で綺麗にしておきます。
10.追加したディスクに作成したディレクトリも削除しておきます。
11.これで復旧を再度確認し、問題がなければ完了です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3